Вопросы по дизасемблированию
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Вопросы по дизасемблированию - 2010-07-08 11:17:39.106666
|
|
|
Fad.Mypl
Сообщений: 49
Оценки: 0
Присоединился: 2008-08-13 13:17:23.186666
|
Решил попрактиковаться и вот что получается…
[84][asm.asm-des: /home/asm]$ gdb -q ./a.out
Reading symbols from /home/asm/hack/a.out...done.
(gdb) set disassembly-flavor intel
(gdb) list
1 #include <stdio.h>
2
3
4 int main()
5 {
6 int i;
7 for (i=0; i<10; i++)
8 printf("Hello World\n");
9 return 0;
10 }
(gdb) break main
Breakpoint 1 at 0x80483ed: file les2.c, line 7.
(gdb) i r eip
The program has no registers now.
(gdb) run
Starting program: /home/asm/hack/a.out
Breakpoint 1, main () at les2.c:7
7 for (i=0; i<10; i++)
(gdb) i r eip
eip 0x80483ed 0x80483ed <main+9>
(gdb) x/i $eip
0x80483ed <main+9>: mov DWORD PTR [esp+0x1c],0x0
(gdb) nexti
0x080483f5 7 for (i=0; i<10; i++)
(gdb) i r eip
eip 0x80483f5 0x80483f5 <main+17>
(gdb) x/i $eip
0x80483f5 <main+17>: jmp 0x8048408 <main+36>
(gdb) nexti
0x08048408 7 for (i=0; i<10; i++)
(gdb) x/i $eip
0x8048408 <main+36>: cmp DWORD PTR [esp+0x1c],0x9
(gdb) x/4i $eip
0x8048408 <main+36>: cmp DWORD PTR [esp+0x1c],0x9
0x804840d <main+41>: jle 0x80483f7 <main+19>
0x804840f <main+43>: mov eax,0x0
0x8048414 <main+48>: leave
(gdb)
Вообщем нужна помощь в объяснении последних строк Понимаю что идет сравнение, а вот дальше что то не очень =\\
|
|
|
RE: Вопросы по дизасемблированию - 2010-07-08 11:24:26.690000
|
|
|
Flint_ta
Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
|
А что и чем дизасмите? И какие конкретно строки не понятны?
|
|
|
RE: Вопросы по дизасемблированию - 2010-07-08 11:31:11.696666
|
|
|
Fad.Mypl
Сообщений: 49
Оценки: 0
Присоединился: 2008-08-13 13:17:23.186666
|
Код на С. Через GNU gdb. Синтаксис интеловский на нем. Строки последние…
0x8048408 <main+36>: cmp DWORD PTR [esp+0x1c],0x9
0x804840d <main+41>: jle 0x80483f7 <main+19>
0x804840f <main+43>: mov eax,0x0
0x8048414 <main+48>: leave
То есть первый раз просмотр eip показал что переменная "i" обнуляется по адресу [esp+0x1c] Далее при продолжении показал уже выше изложенный код. Хотелось бы узнать как эти строки подробно можно объяснить… Есть своя точка зрения и хотелось бы просто её поправить если есть какие то недочеты. Заранее спасибо :)
|
|
|
RE: Вопросы по дизасемблированию - 2010-07-08 11:46:07.416666
|
|
|
Flint_ta
Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
|
cmp DWORD PTR [esp+0x1c],0x9 ; jle 0x80483f7 <main+19> ; если меньше или равно 9, то переходим на <main+19> mov eax,0x0 ; иначе обнуляем регистр eax leave ; восстанавливаем стэк for (i=0; i<10; i++) - это уже твои комменты? Если да, то по видимому в листинге не хватает инструкции inc DWORD PTR [esp+0x1c] ;
|
|
|
RE: Вопросы по дизасемблированию - 2010-07-08 11:52:03.956666
|
|
|
Fad.Mypl
Сообщений: 49
Оценки: 0
Присоединился: 2008-08-13 13:17:23.186666
|
for (i=0; i<10; i++) - это кода отрывок так, а (main+19) это 0x080483f7 <main+19>: mov DWORD PTR [esp],0x80484e0 тут что происходит?
|
|
|
RE: Вопросы по дизасемблированию - 2010-07-08 12:01:10.926666
|
|
|
Flint_ta
Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
|
Изменяется значение верхушки стэка на 0x80484e0, судя по всему это адрес какой-то.
|
|
|
RE: Вопросы по дизасемблированию - 2010-07-08 12:19:43.493333
|
|
|
Fad.Mypl
Сообщений: 49
Оценки: 0
Присоединился: 2008-08-13 13:17:23.186666
|
Ок. теперь всё ясно. спасибо. Тему можно закрывать.
|
|
|
RE: Вопросы по дизасемблированию - 2010-07-22 13:05:02.076666
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
quote:
leave ; восстанавливаем стэк Удаление кадра стека, выделенного под локальные переменные функции
|
|
|
|
|