Jiw*_*won 0 debugging x86 assembly segment
我得到了一些不一致的教学结果.
我不知道为什么会这样,所以我怀疑%es寄存器做的很奇怪,但我不确定.
请看下面的代码段.
08048400 <main>:
8048400: bf 10 84 04 08 mov $HERE,%edi
8048405: 26 8b 07 mov %es:(%edi),%eax # <----- Result 1
8048408: bf 00 84 04 08 mov $main,%edi
804840d: 26 8b 07 mov %es:(%edi),%eax # <----- Result 2
08048410 <HERE>:
8048410: 11 11 adc %edx,(%ecx)
8048412: 11 11 adc %edx,(%ecx)
Run Code Online (Sandbox Code Playgroud)
结果1:
%eax : 0x11111111
Run Code Online (Sandbox Code Playgroud)
看到这个结果,我猜想 mov %es:(%edi),%eax有点像mov (%edi),%eax.
因为0x11111111存储在HERE.
结果2:
%eax : 0x048410cc
Run Code Online (Sandbox Code Playgroud)
但是,结果2的结果完全不同.
我假设%eax是0x048410bf,因为这个值存储在main.
但结果却不同,你可以看到.
问题:
为什么结果不一致?
顺便说一下,%es在执行两条指令时,值总是为0x7b.
es是一只红鲱鱼.您看到的差异是1个字节at main,ccvs bf. 那是因为您使用了一个软件断点,main并且您的调试器插入了一条int3指令,该指令的机器代码会cc暂时覆盖您的实际代码.
不要在打算读取的位置设置断点,也不要使用不修改代码的硬件断点.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |