Tag: stackframe

如何在C中使用FP

我正在努力学习并更好地理解FP(BP),根据我的教科书“FP(BP):指向当前活动function的堆栈帧”。 我已经知道堆栈帧链接列表以0结尾。因此,为了打印出堆栈帧链接列表,我编写了这个函数: int a = 1; int b = 2; int c = 3; asm(“movl %ebp, FP”); //Sets FP int *i = FP; while(i != 0) { printf(“Value: %d \n”, i); //Not working printf(“Hex Address: %#X \n”, i); i = *i; } 所以我认为十六行地址是有效的。 它打印3个hex地址。 我可能错了,但我要做的是打印“active function”中所有3个变量的值以及它们的hex地址。 我的价值线不起作用。 也许我不明白函数堆栈是如何工作的? 我尝试打印我喜欢我,*我,我,尝试了所有不同的东西,不起作用。 有什么帮助澄清?

如何编写一个返回指向堆栈的指针的函数

在阅读了以下问题之后 ,我明白没有这样的事情存在(至少不是“便携式”)。 但是我主演单声道代码库中的以下代码片段 ,它返回指向堆栈的指针: static void * return_stack_ptr () { gpointer i; return &i; } 令我感到惊讶的是,上面的代码甚至可以在诸如PowerPC之类的arch上工作,我认为这只适用于x86(也许只有gcc)。 这是否适用于PowerPC?

如果该函数没有真正提供函数调用,那么函数调用的返回值是多少

假设我们有以下代码: int func(char str[], int len) { // Don’t return anything here. } int main() { char str[] = “Hello”; int result = func(str, strlen(str)); printf(“%d\n”, result); } 它会在我的电脑上打印一些字符串值-1679929632。 当我执行时,它会不时变化。 谁能解释为什么会这样?