背景
typedef struct Result {
int type;
union {
Err err;
Table tbl;
};
} Result;
typedef struct Err {
int status;
String command;
String err;
} Err;
Result *getres(...) {
....
return &(Result) {....};
}
void somefun(..) {
...
Result *res = getres(..);
// (A)
handleres(res);
}
void handleres(Result *res) {
// (B)
...
}
(A)在A点,res有从getres传递的预期数据,但是点(B)有不同的数据,并且调试代码视图,大多数res元素指针都有相同的res !!指针,而不仅仅是第一个元素,除了一个元素res-> err-> err;
装配意义上的
getres返回指向eax中本地Result的指针,该指针可以跨越-start(ebp)到getres例程的-end(ebp)。
问题
动态分配有效,但为什么静态定义的结构指针表现那样,汇编帧是否被使用,-start(ebp),-end(ebp)被覆盖?