{
PTEB pTeb = NtCurrentTeb();
PPEB pPeb = pTeb->ProcessEnvironmentBlock;
+ printf("TEB::PEB=0x%lx PEB::GdiHT=0x%lx, Peb=%p, Teb=%p\n", FIELD_OFFSET(TEB, ProcessEnvironmentBlock), FIELD_OFFSET(PEB, GdiSharedHandleTable), pTeb, pPeb);
return pPeb->GdiSharedHandleTable;
}
static DWORD WINAPI
IntSyscall(FARPROC proc, UINT cParams, PVOID pFirstParam)
{
- DWORD ret;
+ DWORD retval = 0;
+#ifdef _M_I386
+#ifdef __GNUC__
asm volatile
(
"pushfl;" // Save flags
"rep movsd;" // Copy params to the stack
"call *%%edx;" // Call function
"popfl;" // Restore flags
- : "=a" (ret)
+ : "=a" (retval)
: "S" (pFirstParam), "c" (cParams), "d"(proc)
: "%edi"
);
-
- return ret;
+#else
+ __asm
+ {
+ pushf
+ mov eax, cParams
+ shl eax, 2
+ sub esp, eax
+ mov edi, esp
+ cld
+ rep movsd
+ call proc
+ mov retval, eax
+ popf
+ };
+#endif
+#endif
+
+ return retval;
}
DWORD
Syscall(LPWSTR pszFunction, int cParams, void* pParams)
{
char szFunctionName[MAX_PATH];
+ FARPROC proc;
sprintf(szFunctionName, "%ls", pszFunction);
- FARPROC proc = (FARPROC)GetProcAddress(g_hModule, szFunctionName);
+ proc = (FARPROC)GetProcAddress(g_hModule, szFunctionName);
if (!proc)
{
printf("Couldn't find proc: %s\n", szFunctionName);