能力值:
( LV2,RANK:10 )
|
-
-
2 楼
movb $0x61,-0x50(%rbp) 是buffer[0] = 'a'; 说明了buffer的起始地址而已。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
哈哈 找到了 是由于默认的 stack-protector 给加了个内容,再算上ebp : 8 + 8 + 4 + 64 = 84 。这样就说通了 gcc -fno-stack-protector -fno-asynchronous-unwind-tables -S -O0 demo.c 得到如下: .file "demo.c" .text .globl main .type main, @function main: pushq %rbp movq %rsp, %rbp movl $1, -4(%rbp) movb $97, -80(%rbp) movb $97, -17(%rbp) movl $0, %eax popq %rbp ret .size main, .-main .ident "GCC: (GNU) 9.1.0" .section .note.GNU-stack,"",@progbits
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
.file "demo.c" .text .globl main .type main, @function main: pushq %rbp movq %rsp, %rbp movl %edi, -84(%rbp) movq %rsi, -96(%rbp) movl $1, -4(%rbp) movb $97, -17(%rbp) // 为什么是 -17 ,不是 -5? movl $0, %eax popq %rbp ret .size main, .-main .ident "GCC: (GNU) 9.1.0" .section .note.GNU-stack,"",@progbits
========= int main(int argc, char** argv) { int i; char buffer[64]; i = 1; buffer[63] = 'a'; return 0; } 后面大师讨论说: 这里的 movb $97, -17(%rbp) 的是由于 编译器的 16 字节对齐 ,所以开始是 17
|
|
|