小编Dav*_*son的帖子

操作`mov [esp - 4],eax`添加额外的字节

我正在用MSVC++中的机器代码进行一些实验,并创建了一个函数,允许我在带有符号位移的寄存器周围构建mov操作.一切顺利,直到我的功能建立起来mov [esp-4], eax.突然,我的程序开始崩溃了.在看完拆卸后,我发现了一些相当奇怪的东西.对于此mov取消引用ESP寄存器的偏移量,在参数字节和有符号位移之间放置了一个额外的字节.这个字节似乎总是0x24.因此,出于好奇,我拆解了下面的__asm块并获得了一些有趣的结果:

mov [eax - 4], eax
mov [ecx - 4], eax
mov [edx - 4], eax
mov [ebx - 4], eax
mov [esp - 4], eax
mov [ebp - 4], eax
mov [esi - 4], eax
mov [edi - 4], eax
Run Code Online (Sandbox Code Playgroud)

机器代码将上述内容翻译成:

89 40 FC
89 41 FC
89 42 FC
89 43 FC
89 44 24 FC      <--- WAT!
89 45 FC
89 46 FC
89 47 FC
Run Code Online (Sandbox Code Playgroud)

我在Windows计算器中键入了十六进制24并将其切换为二进制.结果是 …

assembly intel machine-code cpu-registers

2
推荐指数
1
解决办法
1063
查看次数

标签 统计

assembly ×1

cpu-registers ×1

intel ×1

machine-code ×1