[Programming] Cần giúp đỡ về Assembly |
13/11/2007 16:15:12 (+0700) | #1 | 97315 |
thaihabk05
Member
|
0 |
|
|
Joined: 04/09/2006 16:04:56
Messages: 8
Offline
|
|
Mình đang nghiên cứu bài viết về "Lỗi tràn bộ đệm".
Khi mình debug thử 1 chương trình đơn giản như ví dụ trong bài viết thì nó ra một số đoạn lệnh không giống như trong ví dụ và cả các vùng nhớ cho các biến.
Mong các bro giúp đỡ giải thích cho mình kỹ càng đoạn mã assembly này với.
Cái này mình debug trên linux.
Mấy bạn xem giùm mấy chỗ chú thích lệnh của mình đã đúng chưa, và giúp giải thích nốt các lệnh còn lại nhé.
/* fct.c */
void toto(int i, int j)
{
char str[5] = "abcde";
int k = 3;
j = 0;
return;
}
int main(int argc, char **argv)
{
int i = 1;
toto(1, 2);
i = 0;
printf("i=%d\n",i);
}
Dump of assembler code for function main:
0x080483aa <main+0>: push %ebp//dua ebp vao stack
0x080483ab <main+1>: mov %esp,%ebp//chep ebp cho esp
0x080483ad <main+3>: sub $0x8,%esp//giam esp di 8 bytes,de cap phat vung nho cho bien i
0x080483b0 <main+6>: and $0xfffffff0,%esp
0x080483b3 <main+9>: mov $0x0,%eax
0x080483b8 <main+14>: sub %eax,%esp
0x080483ba <main+16>: movl $0x1,0xfffffffc(%ebp)//gan i=1
0x080483c1 <main+23>: sub $0x8,%esp //cap phat 8 byte o nho bang cach giam esp di 8 bytes
0x080483c4 <main+26>: push $0x2//add cac tham so vao stack
0x080483c6 <main+28>: push $0x1
0x080483c8 <main+30>: call 0x8048384 <toto>
//goi ham toto
0x080483cd <main+35>: add $0x10,%esp//sau khi thuc hien ham thi tang esp len 16 byte
0x080483d0 <main+38>: movl $0x0,0xfffffffc(%ebp)
//gan i =0
0x080483d7 <main+45>: sub $0x8,%esp//giam esp xuong 8 byte
0x080483da <main+48>: pushl 0xfffffffc(%ebp)
0x080483dd <main+51>: push $0x804850a
0x080483e2 <main+56>: call 0x80482b0 <_init+
56>
0x080483e7 <main+61>: add $0x10,%esp
0x080483ea <main+64>: leave
0x080483eb <main+65>: ret
|
|
|
|
|
|