gpt4 book ai didi

在 C 中打印堆栈的代码只返回 "1"

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:50 24 4
gpt4 key购买 nike

我正在学习安全知识。这是我得到的一些示例代码:

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

char *j; /* use to dump the stack in function cat */

/* Strings to be copied into buffer in function cat */
char str1[] = "";
char str2[] = "";

int main() {

void cat(int *parm) {
char buffer[8];

/* Dump the stack for function cat */
for (j=buffer; j<((char *)&parm); j++)
printf("%p: 0x%x\n", j, *(unsigned char *)j);

/* copy str1 followed by str2 into buffer */
/* note that a \0 remains between str1 and str2 in buffer */
strcpy(buffer, str1);
strcpy(&buffer[strlen(str1)+1], str2);

}

int *arg; /* dummy argument for call to function cat */
int x;
x = 0;
cat(arg);
x = 1;
printf("%d\n",x);

}

我正在使用 GCC 进行编译。不过,我得到的只是“1”。任何想法为什么?

此外,我的目标是最终让程序打印出“0”,并通过仅向 cat() 添加代码来实现。我无法更改任何已经存在的内容,只需添加即可。任何帮助我开始正确方向的帮助。

最佳答案

I'm compiling with GCC. All I'm getting is "1" though. Any ideas why?

我们可以看到

   x = 1;
printf("%d\n",x);

所以这可能是实际运行的唯一打印语句。

所以我推断for (j=buffer; j<((char *)&parm); j++)永远不会进入。这有点奇怪。我希望堆栈向下增长,所以我希望参数的地址 parm高于buffer .

你用的是什么机器?尝试打印缓冲区和 &parm 的值,例如

void cat(int *parm) {
char buffer[8];

printf("buffer=%p\n", buffer);
printf("&parm=%p\n", &parm);

...

关于在 C 中打印堆栈的代码只返回 "1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9746926/

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