LinuxAsm#Chapter10
Dividing and Conquering
Book: Assembly Language step by step
Complexity kills programs.
Remember to use comment headers.(Comment is very very important!)
More Than 25 lines and you're doing too much in one procedure.Split it up.
Calling and Returning
call LoadBuff
...
loadBuff:
push eax ; a1
push ebx ; a2
push edx ; a3
mov eax, 3 ; sys_read call
mov ebx, 0 ; File Descriptor 0: stdin
mov ecx, Buff ; offset of the buffer to read to
mov edx, BUFFLEN ; number of bytes to read at one pass
int 80h ; sys_read
mov ebp, eax
xor ecx, ecx
pop edx ; b1
pop ebx ; b2
pop eax ; b3
ret
- a1~a3 and b1~b3 are store of stack
- "xor ecx, ecx" is faster than "mov ecx, 0"
Saving the Caller's Registers
pushad
...
popad
Table Tricks
DumpLin db " 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 "
DUMPLEN equ $-DumpLin
ASCLin db "|................|", 10
ASCLEN equ $-ASCLin
FULLLEN equ $-DumpLin
lea edi, [edx*2+edx] ; trick to calculate 3*edx
Local Labels and the Lengths of Jumps
Scan:
xor eax, eax
...
.modTest:
test esi, 0000000Fh
...
- "Scan" is a nonlocal label.(global label)
- ".modTest" is a local label.
- Local labels are local to the first nonlocal label that precedes them in the code.
- A local label cannot be referenced higher in the source code file than the global label that owns it.
- Local labels are not accessible as breakpoints from the command-line interface of GDB.
- Good habits: local labels and all jumps to them should occur within a single screen of code.
Type of Jumps
jne Scan ; Short jump, to within 127 bytes in either direction
jne near Scan ; Near jump, anywhere in the current code segment
Building External Procedure Libraries
Each executable file can only contain one _start: label. External modules do not contain _start:
External modules do not return to Linux.(Only the main program module can make sys_exit INT 80h call)
main-program.asm:
section .text
extern ClearLine
global _start
_start:
...
call ClearLine
...
lib.asm:
section .text
global ClearLine
...
ClearLine:
...
Rules:
- "extern" to declare all the labels that don't belong to the current file.
- "global" to declare all the labels in the current file needed by other files.
Simple Cursor Control in the Linux Console
[section .data]
PositionTerm db 27, "[01;01H" ; <ESC>[<Y>;<X>H -This sequences move the cursor to (X, Y)
ClearTerm db 27, "[2J" ; <ESC>[2J -This sequences clears the display.
GreenBack db 27, "[42m" ; <ESC>[42m -turns the consoles background green
For more details about console escape codes: man console_codes
Creating and Using Macros
%macro WriteStr 2 ; 2 arguments
push eax
push ebx
mov ecx, %1 ; %1 invokes the first argument (Prompt)
mov edx, %2 ; %2 invokes the second argument (PROMPTLEN)
mov eax, 4
mov edx, 1
int 80h
pop ebx
pop eax
%endmacro
....
....
WriteStr Prompt, PROMPTLEN
; When a macro is invoked, its arguments are separated by commas.
Local Labels Within Macros
%macro UpCase 2
mov edx, %1
mov ecx, %2
%%IsLC:
cmp byte [edx+ecx-1], 'a'
jb %%Bump
cmp byte [edx+ecx-1], 'z'
ja %%Bump
sub byte [edx+ecx-1], 20h
%%Bump:
dec ecx
jnz %%IsLC
%endmacro
Macro Libraries As Include Files
%include "mylib.mac"
LinuxAsm#Chapter10的更多相关文章
- 【Python编程:从入门到实践】chapter10 文件和异常
chapter10 文件和异常 10.1 从文件中读取数据 10.1.1 读取整个文件 with open("pi.txt") as file_object: contents = ...
- 【Linux_Unix系统编程】Chapter10 时间
chapter10 时间 1:真实时间:度量这一时间的起点有二:(1)某个标准点:(2)进程生命周期内的某个固定时点(通常为程序启动) 2:进程时间:一个进程所使用的CPU时间总量,适用于对程序,算法 ...
- Chapter10
package scala import java.io.{PrintStream, PrintWriter}import java.util.Date import scala.util.loggi ...
- 【笔记】《Redis设计与实现》chapter10 RDB持久化
chapter10 RDB持久化 10.1 RDB文件的创建和载入 有两个Redis命令可以用于生成RDB文件,SAVE和BGSAVE SAVE阻塞服务器进程进行RDB文件的创建,BGSAVE则创建服 ...
- JavaWeb chapter10 JavaWeb开发模式
1. 开发模式 (1)开发模式1:JSP+JavaBean (2)开发模式2:Servlet+JSP+JavaBean (MVC) 2.JavaBean 本质上是一个普通的Java类:需要遵循一定的 ...
- Chapter10:泛型算法
泛型算法的基础是迭代器. 迭代器令算法不依赖于容器,但是算法依赖于元素类型的操作.也即:算法永远不会执行容器的操作. 那么,如果想向容器中添加元素或者执行其他的一些操作呢?标准库提供了插入迭代器来完成 ...
- Chapter10(泛型算法)--C++Prime笔记
关键:算法通过在迭代器上进行操作来实现类型无关.算法不改变所操作序列的大小. 1.算法大多都定义在algorithm头文件中,标准库还在头文件numeric中定义了一组数值泛型算法. 2.泛型算法永远 ...
- 【APUE】Chapter10 Signals
Signal主要分两大部分: A. 什么是Signal,有哪些Signal,都是干什么使的. B. 列举了非常多不正确(不可靠)的处理Signal的方式,以及怎么样设计来避免这些错误出现. 10.2 ...
- [SharePoint][SharePoint Designer 入门经典]Chapter10 Web部件链接
本章概要: 1.Web部件作用 2.如何添加和配置 3.如何个性化 4.如何导出,并在其他站点重利用 5.通过组合web part创建复杂的用户界面
随机推荐
- 10个漂亮的响应式的食品 WordPress 美食模板
您是否拥有一个餐厅,酒吧,咖啡馆,小酒馆,比萨饼店?如果答案是肯定的,请确保您在网上也提供服务.为了使您的工作更轻松,我们选择了一些新的和独特的餐厅主题,覆盖了范围很广的食品企业.这些主题提供了很多很 ...
- 【经验之谈】前端面试知识点总结(HTML相关)——附答案
目录 一.HTML部分 1.浏览器页面有哪三层构成,分别是什么,作用是什么? 2.HTML5的优点与缺点? 3.Doctype作用? 严格模式与混杂模式如何区分?它们有何意义? 4.HTML5有哪些新 ...
- JS去掉首尾空格 简单方法大全(原生正则jquery)
JS去掉首尾空格 简单方法大全 var osfipin= ' http://www.cnblogs.com/osfipin/ '; //去除首尾空格 osfipin.replace(/(^\s*)|( ...
- asp.net+nopi生成Excel遇到设置单元格值null问题
Npoi 生成excel报表功能很不错,功能也不用给大家介绍了.首先看遇到的问题吧! FileStream file = new FileStream(Server.MapPath("Tem ...
- 关于Canvas模糊的问题
前言:当我在几个多月前,第一次在移动设备上使用canvas绘制内容的时候,我惊然地发现我绘制的图片以及文字居然都是模糊的!我的内心几乎是崩溃的,因为那是我第一个使用canvas的项目,是一个基于微信端 ...
- GRID方式ALV导出数据到本地丢掉最后一位的问题
这是SAP的一个Bug,FM方式ALV Grid和Class ALV Grid都会出现,但是ALV List好像没有这个BUG. 在以下几个条件满足的时候就会出现这个问题: 1.字段对应的域Con ...
- Base64 Converter
<Window x:Class="Base64Convertor.MainWindow" xmlns="http://schemas.microsoft.com/w ...
- %1$s,%2$s等的用法
String.format(String format, Object... args)方法中: format:格式字符串. 如:%1$s,%1$d,%2$s... ...
- C语言ASCII码、运算符优先级、转义字符
- Android与JS之间跨平台异步调用
为什么突然要搞这个问题呢? 在开发浏览器的时候遇到这个狗血的问题,花了将近1天的时间才想到这个解决方案,Android与JavaScirpt互调. 因为接口是抓取的别人的,所以出现了JS跨域问题, ...