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创建复杂的用户界面
随机推荐
- spring(4)——自动装配
set注入和构造注入有时在做配置时比较麻烦.所以框架为了提高开发效率,提供自动装配功能,简化配置.spring框架式默认不支持自动装配的,要想使用自动装配需要修改spring配置文件中<bean ...
- Android项目实战(二十二):启动另一个APP or 重启本APP
一.启动另一个APP 目前公司项目需求,一个主APP,需要打开某些小APP,这些小APP是整合了Unity的,但是还是android程序(所有小APP的包名是已知的). 以前没做过,查询了一下实现方法 ...
- 开发Android系统内置应用小记
Android系统内置应用可以使用更多的API.更高的权限,与开发普通应用最大的差别在于编译,内置应用编译需要用到Android.mk文件.下面是我在开发过程中的一些小记. 1.在AndroidMai ...
- iOS通用的MVC模式项目框架MobileProject
最近项目比较不赶的情况下,决定把一些通用.常用的内容集成在一个项目框架中,意在新项目中可以快速搭建:其实经过几个项目后,总是有一些重复的创建工作,可以使用本项目的内容直接进行开发:采用的是MVC的分层 ...
- 【代码笔记】iOS-翻书效果的实现
代码: RootViewController.m #import "RootViewController.h" @interface RootViewController () @ ...
- 在eclipse中把之前的Tomcat 6删掉,不能再建
在eclipse中把之前的Tomcat 6删掉,重新配置一个,不料没有下一步. 解决的方法了,如下: 1.退出 eclipse 2.到[工程目录下]/.metadata/.plugins/org.ec ...
- HTML5 结构性标签 行内语义性标签
结构性标签: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...
- 如何开启win7端口的图文教程
Windows 7/Vista/XP/2003等系统中的远程终端服务是一项功能非常强大的服务,下面来教教大家如何开启端口:打开“控制面板”中的“Windows防火墙”,点击左侧的“高级设置” 右击“入 ...
- 理解 Statement 和 PreparedStatement
java,servlet中的PreparedStatement 接口继承了Statement,并与之在两方面有所不同:有人主张,在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以Prepar ...
- ASP.NET处理301重定向方法 带示例 (demo)
System.Web.HttpContext.Current.Response.Status = "301 Moved Permanently"; System.Web.HttpC ...