在 x64dbg 中从 .NET 2.0 DLL 的内部调用反汇编中查看 32 位浮点数

逆向工程 拆卸 漂浮
2021-06-30 23:17:25

我是使用 x32/64dbg 的新手,我有一个带有 PDB 符号的 EXE,想要反汇编和调试非托管函数调用。它来自 x86 .NET 2.0 DLL,其中非托管代码位于 EXE 内编译。

我在符号中查找了我要调试的内部调用,并在函数的入口和出口处设置了断点。

该函数将 .NET DLL 方法调用中的一组 3 个 32 位浮点数作为输入,通过内部调用运行一些计算,然后将一组 4 个 32 位浮点数输出回 .NET。

该函数基本上对参数进行了一些 sin/cos/atan2 调用,以及一些我想检查准确性的其他数学运算。有没有办法将参数值读取为浮点数?我似乎无法在任何地方的文档中找到这个。基本上我只需要获取函数的输入和输出值。

由于找不到方法,我尝试创建一个快速应用程序以输入 4 个字节作为十六进制并根据此处的一些文档输出符号/指数/有效数(https://msdn.microsoft.com/en-us/library /system.single(v=vs.110).aspx ) 但我的结果与应用程序的输入不匹配,我确定我没有做正确的事情。

函数的反汇编如下所示:

push ebp
mov ebp,esp
mov eax,dword ptr ss:[ebp+8]
sub esp,10
push 4
push eax
lea ecx,dword ptr ss:[ebp-10]
push ecx
call <testapp.ConversionFunction>
movq xmm0,qword ptr ds:[eax]
mov ecx,dword ptr ss:[ebp+C]
movq dword ptr ds:[ecx],xmm0
movq xmm0,qword ptr ds:[eax+8]
add esp,C
movq qword ptr ds:[ecx+8],xmm0
mov esp,ebp
pop ebp
ret
1个回答

经过一番挖掘,我得到了它。右键单击您的转储以在地址和浮点之间更改数据类型。你必须按照esp-4指向的地址的地址来获取参数。