WinDbg 是否显示错误的操作码 [MOV r32,r/m32]?



我正在修补位于 VS2019 16.2.3 链接器 "C:\Program Files (x86(\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.22.27905\bin\Hostx86\x86\link.exe",以便像往常一样使用 WinDbg:10.0.17763.132 X86 摆脱富签名。

首先找到唯一的调用链接!图片::CbBuildProdid块内部链接!图片::构建图片:

ModLoad: 00130000 00297000   link.exe
0:000> # call*link!IMAGE::CbBuildProdidBlock link!IMAGE::BuildImage
link!IMAGE::BuildImage+0xeac:
00176e28 e896830000      call    link!IMAGE::CbBuildProdidBlock (0017f1c3)

然后:

0:000> u 00176e28
link!IMAGE::BuildImage+0xeac:
00176e28 e896830000      call    link!IMAGE::CbBuildProdidBlock (0017f1c3)
00176e2d 8b8f90020000    mov     ecx,dword ptr [edi+290h]
00176e33 8b1518d42500    mov     edx,dword ptr [link!CbHdr (0025d418)]
00176e39 03c8            add     ecx,eax
00176e3b 898528faffff    mov     dword ptr [ebp-5D8h],eax
00176e41 8d8500faffff    lea     eax,[ebp-600h]
00176e47 898f94020000    mov     dword ptr [edi+294h],ecx
00176e4d 8bcf            mov     ecx,edi

因此,将add ecx,eax更改为nopnop就可以了。

不小心我发现上面的行add ecx,eax

00176e33 8b1518d42500    mov     edx,dword ptr [link!CbHdr (0025d418)]

其文件偏移量为 00176e33 - 00130000 - (1000 - 400( = 46233。

但是,在记事本++ + HexEditor和VSCode + hexdump中,它显示8B 15 18 D45200而不是8B 15 18 D42500

00046230: 02 00 00 8B 15 18 D4 52 00 03 C8 89 85 28 FA FF

我尝试将文件复制到其他任何地方,或多次启动 WinDbg 以确保不是由数据错误引起的,结果仍然相同。

为什么 WinDbg 在 00176e33 处显示"8b1518d42500"而不是"8B 15 18 D45200",我是否必须彻底了解英特尔 X86 操作码和指令参考才能解决此问题?

windbg是否显示应用了运行时重定位修正后的反汇编? 它是 32 位代码,因此不能使用 RIP 相对寻址。

这可以解释指令中绝对地址的一些高位与磁盘上的文件不同。

0x25字节是该mov edx, [disp32]指令中[link!CbHdr (0025d418)]寻址模式的小端 disp32 编码的第二高字节。

相关内容

  • 没有找到相关文章

最新更新