2011-04-05 4 views
3

그래서 VS2010에서 __asm ​​블록을 사용하고 있으며 어셈블리 블록의 시작 부분에 포인터를 가져 오는 더 좋은 방법을 찾을 수 없었습니다.C++의 인라인 __asm ​​블록에 대한 포인터

이 작업을 수행하는 방법을 알고있는 유일한 방법은 void 함수를 선언하는 것입니다. 이 문제의 한 가지 문제점은 void 함수가 어셈블리 블록 전후에 자체 어셈블리를 가지므로 함수의 실제 주소를 가져 와서 오프셋을 추가하여이를 보완해야한다는 것입니다.

예 :

C++

void myfunc(){ 
    __asm{ 
     nop 
     nop 
     nop 
     ret 
    } 
} 

이에 조립 유사한 초래 :

push ebp 
mov ebp,esp 
add esp,8 
nop 
nop 
nop 
retn 
mov esp,ebp 
pop ebp 
retn 

이 myfunc()가 가장 가능성이 오류 실행한다면.

답변

관련 문제