Tôi đã làm việc với C một thời gian ngắn và gần đây đã bắt đầu tham gia vào ASM. Khi tôi biên dịch một chương trình:
int main(void)
{
int a = 0;
a += 1;
return 0;
}
Quá trình gỡ bỏ objdump có mã, nhưng không đạt sau lần sửa lại:
...
08048394 <main>:
8048394: 55 push %ebp
8048395: 89 e5 mov %esp,%ebp
8048397: 83 ec 10 sub $0x10,%esp
804839a: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
80483a1: 83 45 fc 01 addl $0x1,-0x4(%ebp)
80483a5: b8 00 00 00 00 mov $0x0,%eax
80483aa: c9 leave
80483ab: c3 ret
80483ac: 90 nop
80483ad: 90 nop
80483ae: 90 nop
80483af: 90 nop
...
Từ những gì tôi học được, nops không làm gì cả, và vì sau khi ret thậm chí sẽ không được thực hiện.
Câu hỏi của tôi là: tại sao phải bận tâm? ELF (linux-x86) không thể hoạt động với phần .text (+ main) ở bất kỳ kích thước nào?
Tôi đánh giá cao mọi sự giúp đỡ, chỉ cố gắng học hỏi.
80483af
, thì có thể đó là đệm để căn chỉnh hàm tiếp theo thành 8 hoặc 16 byte.