СБОРКА Смещение в C ++ Код вопроса - PullRequest
0 голосов
/ 08 сентября 2011

Я пытался преобразовать этот код в C ++ без каких-либо вставок, и я не могу понять это ..

Скажем, вы получили эту строку

sub     edx, (offset loc_42C1F5+5)

Мои hex-лучия

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 голосов
/ 08 сентября 2011

IDA неправильно определила 0x42C1FA как смещение, и Hex-Rays использовал эту интерпретацию. Просто конвертируйте его в простое число (нажмите O), и все будет хорошо. Вот почему он называется Интерактивный Дизассемблер:)

0 голосов
/ 08 сентября 2011

loc_42C1F5 является символом. Учитывая предоставленную вами информацию, я не могу сказать, каково ее смещение. Это может быть 0x42C1F5 или что-то совсем другое.

Если это 0x42C1F5, то ваш перевод должен быть правильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...