Я думаю, что на этот вопрос легко (возможно, до глупости легко) ответить, но после почти двух часов гугления я вычеркнул его. Я почти уверен, что моя проблема в том, что я просто не понимаю, что делает синтаксис.
Я смотрю на какой-то дизассемблированный код в IDA и понятия не имею, что делает следующее:
mov dl, byte_404580[eax]
Если я перейду к byte_404580
, я обнаружу, что .data:00404580 byte_404580 db 69h
говорит мне, что значение равно 0x69
. Но я не вижу, как это используется.
Позвольте мне предоставить контекст, в котором появляется этот код:
mov eax, 0x73 ; Move hex 73 to EAX
and eax, 0x0F ; Keep lower half of EAX
mov dl, byte_404580[eax] ; MAGIC
С приведенным выше предположением, что EAX
изначально равно 0x73, я получаю DL
=0x76. Я пробовал варьировать значения EAX
, чтобы найти закономерность, но не смог понять, что происходит.
byte_404583
? - person slavemaster   schedule 27.08.20120x404580 + (eax & 0x0F)
, обработке его как адреса и взятию одного байта из этого адреса. Это говорит о том, что данные в0x404580
представляют собой массив байтов (скорее всего, 0x10 элементов, исходя из маски), а не один байт. Сравните с2["hello"] == "hello"[2]
C. - person DCoder   schedule 27.08.2012byte_404583=0x76
- person CatShoes   schedule 27.08.2012DL=ox65
. Я почти уверен, что искал неправильное значение EAX. - person CatShoes   schedule 27.08.20120x404580
, это массив байтов (16 байтов, если быть точным). Затем наименее значимая часть того, что я инициализирую EAX, дает мне смещение в этом массиве байтов, чтобы получить значение для DL. Я ценю это. Если вы напишите это как ответ, я отмечу это для вас. - person CatShoes   schedule 27.08.2012