我一直在尝试将此代码转换为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
答案 0 :(得分:0)
loc_42C1F5
是一个符号。鉴于您提供的信息,我不能说它的偏差是什么。它可能是0x42C1F5,也可能完全是其他东西。
如果是0x42C1F5,那么你的翻译应该是正确的。
答案 1 :(得分:0)
IDA错误地将0x42C1FA识别为偏移量,而Hex-Rays使用了该解释。只需将其转换为普通数字(按O),一切都会很好。这就是为什么它被称为交互式反汇编程序:)