Очень положительное смещение относительно EBP - PullRequest
1 голос
/ 02 марта 2012

У меня есть i386 двоичный файл, и у меня нет возможности его выполнить.otool -tv говорит:

некоторая функция или метод:

0001a1e0    pushl   %ebp            ; just prolog
0001a1e1    movl    %esp,%ebp       ; save old ESP
0001a1e3    pushl   %edi            ; save EDI, ESI, EBX
0001a1e4    pushl   %esi            ;
0001a1e5    pushl   %ebx            ;
0001a1e6    subl    $0x4c,%esp      ; allocate 0x4c bytes for local puproses
...                                 ; etc

Инструкция где-то ниже

0001a20e    leal    0xe0(%ebp),%eax ; load an address into EAX

разочаровала меня!Куда указывает 0xe0(%ebp)?Я думаю, что это не локальная переменная из-за положительного смещения.Я вижу такой доступ среди всего вывода otool.Как это интерпретировать?

1 Ответ

3 голосов
/ 02 марта 2012

Это ссылка на адрес стека, но ваш asm вводит в заблуждение (вот почему мне не нравится синтаксис AT & T), если вы конвертируете leal 0xe0(%ebp),%eax в последовательность байтов, вы получите 8D45 E0, что такой же как LEA EAX,DWORD PTR SS:[EBP-20].

Это либо создание указателя на локальный буфер стека (созданный SUB ESP), либо создание указателя на 7-й параметр функции, но, не видя полного кода, мои ставки на прежние.

...