2013-06-10 3 views
0

Я новичок в сборке, и я пытаюсь понять эти строки:Пытаясь понять код сборки

mov $0x80484e0,%ebx // what the hell means this value: 0x80484e0? 
mov $0x1b,%eax // writing 27 in %eax 
mov %edx,%edi // ? %edx is not used until not, why reading from there? 
mov %ebx,%esi // why not like this: mov $0x80484e0,%esi 
mov %eax,%ecx // writing 27 in counter-register, but same questen like one line before 
rep movsl %ds:(%esi),%es:(%edi) // repeat 27 times: copy 32 bit word from %ds:(%esi) to %es:(%edi) 

но какой смысл% DS: (% еси),% эс :(% ЭОД)? Я просто знаю, что эта строка должна что-то скопировать. Но самым важным вопросом является значение значения 0x80484e0.

+0

'mov reg, reg' будет намного короче, чем' mov reg, imm' –

ответ

1

$0x80484e0 означает буквальное значение 0x80484e0, которое представляет собой шестнадцатеричное представление числа. Это, скорее всего, адрес чего-то. Без дополнительного кода сложно помочь вам с его значением.

Второй вопрос: почему бы не перейти непосредственно к esi? Существует несколько возможностей: один из них заключается в том, что код позже использует значение в ebx, поэтому лучше сделать его копию. Инструкция movsl изменяет esi и edi.

+0

Я вижу ... можно получить значение этого адреса? возможно, с gdp? Я попробовал disas 0x80484e0, но у меня нет результата ... –

+0

Значение адреса * * 0x80484e0. Это могут быть инструкции, но более вероятными являются данные с учетом инструкций, которые манипулируют им. – wallyk

Смежные вопросы