执行函数后,我需要读取堆栈的内容
因为我知道堆栈中的最高和最低地址,所以我尝试读取堆栈中的内容 我在代码中创建了这个函数
int pile_start =0xd0000890;
int size =0x1890;
void read_stack()
ptrdiff_t i;
for ( i = pile_start; i < size; i++) {
printf("pile = %d", *(pile_start+i)); // error
}
但是我有这个错误:
error: invalid type argument of unary '*' (have 'long int')
可能是我读取堆栈内容不正确的方式 我需要你的帮助
答案 0 :(得分:0)
错误消息很清楚。您正在尝试将间接运算符应用于long int类型的对象
printf("pile = %d", *(pile_start+i));
^^^^^^^^^^^^^^^
也许你是说
printf("pile = %ld", (pile_start+i));
或者您需要将变量pile_start
强制转换为指针,例如
printf("pile = %d", *( unsigned char * )(pile_start+i));
答案 1 :(得分:0)
printf("pile = %d", *(pile_start+i));
这里pile_start
是一个数字-int
,我假设i
是一个数字,并且您在for
循环中将其用作索引。 (pile_start+1)
的数据类型为int
,并且int
的值无效。
要使用“ *”,您需要有一个指针。因此,首先将(pile_start+1)
转换为指针,然后在该位置读取值。
如果您将代码更改为
printf("pile = %d", *(uint32_t*)(pile_start+i));
它应该在该地址显示内容。