2015-11-04 3 views
0

Имея некоторые проблемы с определением того, что делает конкретный сегмент в лаборатории бинарных бомб в x86.Сборка - Двоичная бомба

0x08048ce8 <+0>: sub $0x1c,%esp 
0x08048ceb <+3>: movl $0x804a4e4,(%esp) 
0x08048cf2 <+10>: call 0x804917b <string_length> 
0x08048cf7 <+15>: add $0x1,%eax 
0x08048cfa <+18>: mov %eax,(%esp) 
0x08048cfd <+21>: call 0x8048870 <[email protected]> 
0x08048d02 <+26>: movl $0x776f7242,(%eax) 
0x08048d08 <+32>: movl $0x2c65696e,0x4(%eax) 
0x08048d0f <+39>: movl $0x756f7920,0x8(%eax) 
0x08048d16 <+46>: movl $0x65726120,0xc(%eax) 
0x08048d1d <+53>: movl $0x696f6420,0x10(%eax) 
0x08048d24 <+60>: movl $0x6120676e,0x14(%eax) 
0x08048d2b <+67>: movl $0x63656820,0x18(%eax) 
0x08048d32 <+74>: movl $0x666f206b,0x1c(%eax) 
0x08048d39 <+81>: movl $0x6a206120,0x20(%eax) 
0x08048d40 <+88>: movl $0x2e626f,0x24(%eax) 
0x08048d47 <+95>: movb $0x62,0xc(%eax) 

Я не уверен, что инструкция movl после malloc делает. Когда я пытаюсь проверить, что находится в этих адресах в gdb, я получаю «Не могу получить доступ к памяти ...». Тогда в чем смысл этих ходов?

EDIT

Спасибо за помощь в этом таНос части. Я все еще застрял, это сегмент сразу после выше.

mov %eax,0x4(%esp) <== moves string loaded into malloc to esp 
mov 0x20(%esp),%eax <== takes user input and move to eax 
mov %eax,(%esp)  <== moves that user input back into esp? 
call 0x804919a <strings_not_equal> 
+1

'% eax' содержит указатель, возвращаемый _malloc_. Все эти перемещения перемещают немедленные значения данных в область памяти malloc'ed. Значения, как представляется, кодируются в виде 32-битных целых чисел. 4 байта текста могут вписываться в 32-битное значение. Например, movl $ 0x776f7242, (% eax) ', по-видимому, перемещает символы ascii 0x42, 0x72, 0x6f, 0x77 (помните, что мы немного ориентированы, чтобы порядок был отменен) к первым 4 байтам памяти malloc'ed площадь. –

+0

'mov% eax, 0x4 (% esp)' перемещает 32-битное значение в '% eax' в ячейку памяти, начиная с 0x04 +% esp. 'mov 0x20 (% esp),% eax' перемещает 32-битное значение, начиная с места памяти% esp + 0x20 и помещает их в% eax. 'mov% eax, (% esp)' перемещает значение в% eax в ячейку памяти, начиная с 0x00 +% esp. Я рекомендую вам посмотреть некоторую документацию о режимах адресации 80386 (https://en.wikipedia.org/wiki/X86#Addressing_modes) и, возможно, https://cs.nyu.edu/courses/fall10/V22.0201- 002/addressing_modes.pdf –

ответ

0

После malloc EAX содержит базовый указатель на недавно размещенную память. Каждый последующий movl перемещает двойную константу слова в EAX с соответствующим смещением. Так ясно, что movl просто загружают данные в область недавно malloc'd.