coolxv / cpp-stub

C++ unit test stub(not mock) and awesome.Surpported ISA x86,x86-64,arm64,arm32,arm thumb,mips64,riscv,loongarch64.
MIT License
280 stars 82 forks source link

arm platform contructor stub across segmentation fault #33

Open wuyao721 opened 1 year ago

wuyao721 commented 1 year ago

arm platform contructor stub across segmentation fault

test for windows + docker, success test for mac(arm) + docker, fails, segment fault when contructor called

I guess function get_dtor_addr may have bug.

wuyao721 commented 1 year ago

`template void * get_dtor_addr(bool start = true) { //the start vairable must be true, or the compiler will optimize out.
if(start) goto Start; //This line of code will not be executed.
//The purpose of the code is to allow the compiler to generate the assembly code that calls the constructor.
{ T(); Call_dtor: ;; }

Start: //The address of the line of code T() obtained by assembly
char p = (char)&&Call_dtor;//https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
//CALL rel32
void ret = 0; char pos; char call = 0xe8; do{ pos = p; if(pos == call) { ret = p + 5 + ((int)(p+1)); }

}while(!ret&&(--p));

return ret;

} `

这只支持x86是吧。arm的call指令不是0xe8吧。

coolxv commented 1 year ago

是的,只支持x86 @wuyao721