汇编偏移到c++代码的问题

ASSEMBLY Offset to C++ Code question

本文关键字:代码 问题 c++ 汇编      更新时间:2023-10-16

我一直在尝试将此代码转换为没有任何内联的c++,但我无法弄清楚…

说你得到了这行

sub     edx, (offset loc_42C1F5+5)

我的六边形射线给了我

edx -= (uint)((char*)loc_42C1F5 + 5))

但是如果没有loc_42C1F5,它会是什么样子呢?

我想应该是

edx -= 0x42C1FA;

但这是正确的吗?(不能在任何汇编器级别的调试器中对这段代码进行步进。因为它损坏了,保护得很好)

loc_42C1F5实际上是一个标签…

seg000:0042C1F5 loc_42C1F5:                             ; DATA XREF: sub_4464A0+2B5o
seg000:0042C1F5                 mov     edx, [esi+4D98h]
seg000:0042C1FB                 lea     ebx, [esi+4D78h]
seg000:0042C201                 xor     eax, eax
seg000:0042C203                 xor     ecx, ecx
seg000:0042C205                 mov     [ebx], eax

loc_42C1F5是一个符号。根据你提供的信息,我不能说它的补偿是多少。它可能是0x42C1F5,也可能完全是其他的东西。

如果是0x42C1F5,那么你的翻译应该是正确的。

IDA错误地将0x42C1FA标识为偏移量,Hex-Rays使用了这种解释。只需将其转换为普通数字(按0),一切都会很好。这就是为什么它被称为交互式反汇编器:)