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.