C++ 메소드의 asm 메소드를 호출 할 권리가 있는지 확실하지 않습니다.C++ 라인에서 asm을 호출하십시오.
C++ hkDrawIndexdPrimitive 방법 :
이__declspec(naked) void DIP_Mid() {
__asm {
pushad
pushfd
PUSH DWORD PTR SS:[EBP+0x1C] // primCount [4 Bytes]
PUSH DWORD PTR SS:[EBP+0x18] // startIndex [4 Bytes]
PUSH DWORD PTR SS:[EBP+0x14] // NumVertices [4 Bytes]
PUSH DWORD PTR SS:[EBP+0x10] // minIndex [4 Bytes]
PUSH DWORD PTR SS:[EBP+0x0C] // PrimType [4 Bytes]
PUSH DWORD PTR SS:[EBP+0x08] // pDevice [4 Bytes]
CALL hkDrawIndexedPrimitive
popad
popfd
XOR ESI,ESI // Replace Code 0x6D9D73D1 [2 Bytes]
CMP DWORD PTR DS:[ESI+18],EBX // Replace Code 0x6D9D73D3 [3 Bytes]
JMP dwDIPRet; // Return to 0x6D9D73D6
}
}
왜 '0x00000018'에서 읽었습니까 ('xor esi, esi; cmp [esi + 18h], ...))? – DCoder
0x6D6D73D1에이 "__declspec (naked) void DIP_Mid"를 삽입하십시오. 이 "__declspec (naked) void DIP_Mid"는 5 바이트를 사용합니다. 0X6D6D73D1 및 0x6d9D73D3 = 5 바이트. 내 인라인 asm에서 코드를 대체하고 0x6D9D73D6로 돌아갑니다. – lannyboy
내 질문에 대한 이해가 어렵습니까? – lannyboy