我一直在尝试将此代码转换为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,则您的翻译应该正确。

07-26 00:22