Разборка с помощью Olly или IDA

Я новичок в реверс-инжиниринге и иногда путаюсь, когда натыкаюсь на LEA инструкцию. Я хочу узнать, как узнать, является ли инструкция lea массивом или указателем ссылки. Многие люди говорят, что инструкция LEA используется как справочная инструкция.

Например: lea ecx, [eax] --означает что-то вроде "int a=&b" в c++;

А некоторые люди говорят, что он используется для загрузки содержимого одного регистра в другой регистр.

Например: lea ecx, [eax] --означает, что содержимое [eax] загружается в ecx;

но я выбираю первый вариант. Но что меня смущает, так это то, что я вижу что-то подобное в olly:

lea ecx, dword ptr ss:[ecx+eax*2]

or

lea ecx, dword ptr ds:[ecx+eax*2] 

и так далее.

Пожалуйста, мне нужно четкое объяснение значения этих инструкций, чтобы знать, когда это означает ссылочный указатель или массив в C++, или даже как узнать оба (массив и ссылочный указатель) в olly или IDA. Я ценю заранее. Спасибо.


person user2770352    schedule 17.07.2014    source источник
comment
лучше в Обратный инжиниринг   -  person Evan Carroll    schedule 16.04.2018


Ответы (1)


В C/C++ доступ к указателю или массиву практически не отличается. Прямой lea ecx, [eax], скорее всего, будет разыменованием указателя, так как смещения нет. Что-то более сложное, например lea ecx, dword ptr ss:[ecx+eax*2], вероятно, является доступом к массиву, поскольку есть базовый указатель (ecx) плюс размер индекса, умноженный на (+eax*2). Для этого нет жестких и быстрых правил.

person rjp    schedule 17.07.2014
comment
lea не выполняет разыменование, mov делает. - person Igor Skochinsky; 24.07.2014
comment
@IgorSkochinsky Вы правильно заметили. Я ошибся. Я не уверен, в чем смысл lea ecx, [eax] вместо того, чтобы просто использовать mov ecx, eax. - person rjp; 06.08.2014
comment
lea ecx, [eax] бессмысленно. но lea ecx, dword ptr ss:[ecx+eax*2] - это просто более быстрая математика (без необходимости чтения дополнительного операнда из ячейки памяти) - person Alex P.; 21.09.2014