Linux 停这段汇编 的几个疑问
Linux 下这段汇编 的几个疑问
push ebp
push ebx
push esi
push edi
xor edx,edx
xor esi,esi
xor ecx,ecx
mov ebx ... //参数1
mov ecx ... //参数
mov edx ... //参数
mov esi ... //参数
mov edi ... //参数
mov ebp ... //参数
mov eax ... //系统调用号
syscall //系统调用号
pop edi
pop esi
pop ebx
pop ebp
int3
我想问的是
1、第一段 和 第三段的作用 为什么只压4个寄存器?其他的呢? 如esp,eax
2、xor在这里的作用就是给寄存器赋值为0是吧?
3、int3 是什么用?和syscall搭配的吗
4、假设加载这段汇编到0x8048000并向执行它,那么eip该设置为0x8048001or0x8048002or0x8048003?0x8048004?
请解释清楚 新手谢谢大家
------解决方案--------------------
1 eax属于“易失存储器”,由于最后要放函数返回值,pop eax 无意义;4个pop后,esp 自动恢复,无需保存。
2 没错
3 调用3号中断(虽然我不知道3号具体是干嘛的)
4 不清楚,我还一直觉得是 0x8048000 。待大侠解答。
------解决方案--------------------
"我查阅到ebx,ecx,edx,esi和edi一般都是放参数的,那么这段代码只push保存其中3个"
在win下这些参数会从右至左push进栈,这里我没看到,Linux下我不是太熟,不过貌似不会吧eax这种寄存器作为参数吧?,这是什么函数调用的汇编?
------解决方案--------------------
int3 是进入调试的中断
在GDB中单步执行,看每步对内存和寄存器的影响。
------解决方案--------------------
1.上一函数栈顶esp由ebp保存,eax一般用来存返回值或入参,不用保存
2.xor异或
3.调三号中断
4.不是,变长指令每个指令占内存数不一样,好像没有一个字节的指令?~~
------解决方案--------------------
linux下 info reg可以看到寄存器的值,ni是单步执行
vc 下,有个窗口可以看寄存器
push ebp
push ebx
push esi
push edi
xor edx,edx
xor esi,esi
xor ecx,ecx
mov ebx ... //参数1
mov ecx ... //参数
mov edx ... //参数
mov esi ... //参数
mov edi ... //参数
mov ebp ... //参数
mov eax ... //系统调用号
syscall //系统调用号
pop edi
pop esi
pop ebx
pop ebp
int3
我想问的是
1、第一段 和 第三段的作用 为什么只压4个寄存器?其他的呢? 如esp,eax
2、xor在这里的作用就是给寄存器赋值为0是吧?
3、int3 是什么用?和syscall搭配的吗
4、假设加载这段汇编到0x8048000并向执行它,那么eip该设置为0x8048001or0x8048002or0x8048003?0x8048004?
请解释清楚 新手谢谢大家
------解决方案--------------------
1 eax属于“易失存储器”,由于最后要放函数返回值,pop eax 无意义;4个pop后,esp 自动恢复,无需保存。
2 没错
3 调用3号中断(虽然我不知道3号具体是干嘛的)
4 不清楚,我还一直觉得是 0x8048000 。待大侠解答。
------解决方案--------------------
"我查阅到ebx,ecx,edx,esi和edi一般都是放参数的,那么这段代码只push保存其中3个"
在win下这些参数会从右至左push进栈,这里我没看到,Linux下我不是太熟,不过貌似不会吧eax这种寄存器作为参数吧?,这是什么函数调用的汇编?
------解决方案--------------------
int3 是进入调试的中断
在GDB中单步执行,看每步对内存和寄存器的影响。
layout src:显示源代码窗口
layout asm:显示反汇编窗口
layout regs:显示源代码/反汇编和CPU寄存器窗口
layout split:显示源代码和反汇编窗口
------解决方案--------------------
1.上一函数栈顶esp由ebp保存,eax一般用来存返回值或入参,不用保存
2.xor异或
3.调三号中断
4.不是,变长指令每个指令占内存数不一样,好像没有一个字节的指令?~~
------解决方案--------------------
linux下 info reg可以看到寄存器的值,ni是单步执行
vc 下,有个窗口可以看寄存器