gpt4 book ai didi

disassembly - 基本 C 程序上的堆栈操作

转载 作者:行者123 更新时间:2023-12-04 06:14:41 29 4
gpt4 key购买 nike

我反汇编了这个基本的 C 代码,试图弄清楚是什么操作
在堆栈上完成。我在 vm,32 位,gcc 4.4.3,基于 ubuntu 上做
发行版。我用这个标志编译了代码。

gcc -ggdb -mpreferred-stack-boundary=2 -fno-stack-protector -o ExploitMe ExploitMe.c

#include<stdio.h>
#include<string.h>

main(int argc, char **argv)
{
char buffer[80];

strcpy(buffer, argv[1]);

return 1;
}

问题是我无法弄清楚为什么在操作 3 中,堆栈
指针移动 0x58,字符长 80 个字符,不应该是 0x50 吗?
dump of assembler code for function main:
0x080483e4 <+0>: push %ebp
0x080483e5 <+1>: mov %esp,%ebp
=> 0x080483e7 <+3>: sub $0x58,%esp
0x080483ea <+6>: mov 0xc(%ebp),%eax
0x080483ed <+9>: add $0x4,%eax
0x080483f0 <+12>:mov (%eax),%eax
0x080483f2 <+14>:mov %eax,0x4(%esp)
0x080483f6 <+18>:lea -0x50(%ebp),%eax
0x080483f9 <+21>:mov %eax,(%esp)
0x080483fc <+24>:call 0x804831c <strcpy@plt>
0x08048401 <+29>:mov $0x1,%eax
0x08048406 <+34>:leave
0x08048407 <+35>:ret
End of assembler dump.

我坚持下去,我后来看到它正在占用执行的长度但是什么
是在这些操作之间制作程序吗? ¿
  0x080483f6 <+18>:lea    -0x50(%ebp),%eax

谢谢

最佳答案

编译器可以随意安排堆栈,但它认为合适。

关于disassembly - 基本 C 程序上的堆栈操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7409423/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com