首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

Linux 停这段汇编 的几个疑问

2014-01-14 
Linux 下这段汇编 的几个疑问push ebppush ebxpush esipush edixor edx,edxxor esi,esixor ecx,ecxmov ebx

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中单步执行,看每步对内存和寄存器的影响。

layout src:显示源代码窗口
layout asm:显示反汇编窗口
layout regs:显示源代码/反汇编和CPU寄存器窗口
layout split:显示源代码和反汇编窗口


[解决办法]
1.上一函数栈顶esp由ebp保存,eax一般用来存返回值或入参,不用保存
2.xor异或
3.调三号中断
4.不是,变长指令每个指令占内存数不一样,好像没有一个字节的指令?~~

[解决办法]
引用:
谢谢 zhao4zhong1 高人 
gdb单步调试时,可以看到内存和寄存器的变化
你是怎么看到的? 是使用其他工具的吗

再次 问题3 被高人解决



linux下 info reg可以看到寄存器的值,ni是单步执行
vc 下,有个窗口可以看寄存器

热点排行