리버스 엔지니어링 중에 eax (매우 이상한 컴파일러)에서 하나의 인수를 전달하는 호출 규칙을 사용하는 매우 이상한 프로그램이 있습니다. 내가 지금 그 함수를 호출 할 내가 그것을 선언하는 방법을 모른다, IDA는 PARAM1가 EAX 레지스터에 전달됩니다C++ 사용자 지정 호출 규칙
bool __usercall foo<ax>(int param1<eax>, int param2);
로 정의합니다. 나는 그러나
bool MyFoo(int param1, int param2)
{
__asm mov eax, param1;
return reinterpret_cast<bool(__stdcall *)(int)>(g_FooAddress)(param2);
}
뭔가를 시도, 불행히도 내 컴파일러는 스택에 PARAM2을 밀어 때, 나는 인라인 어셈블러와 전체 호출을 작성하지 않고이 깨끗하게 만들 수있는 방법 어떤 방법이있는 EAX 레지스터를 사용한다? (저는 Visual Studio를 사용하고 있습니다.)
나는 MSVC fastcall이 ECX + EDX를 사용하고 EAX가 아니라는 것을 알고 있기 때문에 내가 필요로하는 것이 아님 :-( – Listing
당신이 제안한 것처럼 인라인 어셈블러로 떨어지는 것을 의지 해 주셔서 감사합니다. 나는 항상 당신이 거의 항상 인라인을 피할 수 있다고 생각했습니다. 어셈블러는 내가 만나는 첫 번째 상황입니다. – Listing