coolxv/cpp-stub

arm platform contructor stub across segmentation fault

wuyao721 opened this issue · 2 comments

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.

`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吧。

是的,只支持x86 @wuyao721