摘要: 首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(地址地)。下图为典型的存取器安排,观察栈在其中的位置 入栈操作:push eax; 等价于 esp=esp-4,eax->[esp];如下图 出栈操作:pop eax; 等价于 [esp]->ea... 阅读全文
posted @ 2015-09-18 21:41 程序员修练之路 阅读(7298) 评论(0) 推荐(3) 编辑
摘要: 一、AT&T 格式Linux 汇编语法格式 在 AT&T 汇编格式中,寄存器名要加上 '%' 作为前缀;而在 Intel 汇编格式中,寄存器名不需要加前缀。例如: AT&T 格式 Intel 格式 pushl %eax push eax 2. 在 AT&T 汇编格式中,用 '$' 前缀表示一个立即操作数;而在 Intel 汇编格式中,立即数的表示不用带任何前缀。... 阅读全文
posted @ 2015-09-18 21:10 程序员修练之路 阅读(13973) 评论(2) 推荐(6) 编辑
摘要: GAS中每个操作都是有一个字符的后缀,表明操作数的大小。 C声明 GAS后缀 大小(字节) char b 1 short w 2 (unsigned) int / long / char* l 4 float s 4 double l 8 long double t 10/12 注意:GAL使用后缀“l”同时表示4字节整数和8字节双精度... 阅读全文
posted @ 2015-09-18 20:43 程序员修练之路 阅读(1082) 评论(0) 推荐(0) 编辑