汇编偏移到C ++代码问题

时间:2011-09-08 04:31:48

标签: c++ c debugging assembly

我一直在尝试将此代码转换为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

2 个答案:

答案 0 :(得分:0)

loc_42C1F5是一个符号。鉴于您提供的信息,我不能说它的偏差是什么。它可能是0x42C1F5,也可能完全是其他东西。

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

答案 1 :(得分:0)

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