GS模块][汇编到VC++]第一
正题:
004FDFA0 /> \55 PUSH EBP
004FDFA1 |. 8BEC MOV EBP,ESP
004FDFA3 |. 83EC 44 SUB ESP,44
004FDFA6 |. 53 PUSH EBX
004FDFA7 |. 56 PUSH ESI
004FDFA8 |. 57 PUSH EDI
004FDFA9 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
004FDFAC |. A3 5C4EB50A MOV DWORD PTR DS:[AB54E5C],EAX
004FDFB1 |. 6A 00 PUSH 0 ; /lParam = NULL
004FDFB3 |. 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8] ; |
004FDFB6 |. 51 PUSH ECX ; |hInst
004FDFB7 |. 6A 00 PUSH 0 ; |hMenu = NULL
004FDFB9 |. 6A 00 PUSH 0 ; |hParent = NULL
004FDFBB |. 6A 00 PUSH 0 ; |Height = 0
004FDFBD |. 68 00000080 PUSH 80000000 ; |Width = 80000000
(-2147483648.)
004FDFC2 |. 6A 00 PUSH 0 ; |Y = 0
004FDFC4 |. 68 00000080 PUSH 80000000 ; |X = 80000000
(-2147483648.)
004FDFC9 |. 68 0000CF00 PUSH GameServ.00CF0000 ; |Style =
WS_OVERLAPPED|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU|WS_THICKFRAME|WS_CAPTION
004FDFCE |. 68 F44DB50A PUSH GameServ.0AB54DF4 ; |WindowName = "GameServer"
004FDFD3 |. 68 904DB50A PUSH GameServ.0AB54D90 ; |Class =
"GAMESERVER"
004FDFD8 |. 6A 00 PUSH 0 ; |ExtStyle = 0
004FDFDA |. FF15 BCA1B70A CALL DWORD PTR
DS:[<&USER32.CreateWindow>; \CreateWindowExA
/-------------------------------------------------------------------------------------------
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Store instance handle in our global
variable
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance,
NULL);
if (!hWnd)
{
return FALSE;
}
//ShowWindow(hWnd, nCmdShow);下面最大化窗口..
//自定义控件函数..没多大用!为了和原代码一样!所以才添加上来..
InitCommonControls();
ShowWindow(hWnd,SW_SHOWMAXIMIZED);
UpdateWindow(hWnd);
return TRUE;
004FDFED |> \8B55 0C MOV EDX,DWORD PTR SS:[EBP+C]
004FDFF0 |. 52 PUSH EDX ; /ShowState
004FDFF1 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; |
004FDFF4 |. 50 PUSH EAX ; |hWnd
004FDFF5 |. FF15 14A2B70A CALL DWORD PTR
DS:[<&USER32.ShowWindow>] ; \ShowWindow
004FDFFB |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
004FDFFE |. 51 PUSH ECX ; /hWnd
004FDFFF |. FF15 C0A1B70A CALL DWORD PTR
DS:[<&USER32.UpdateWindow>; \UpdateWindow
004FE005 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004FE008 |. 8915 584EB50A MOV DWORD PTR DS:[AB54E58],EDX
004FE00E |. B8 01000000 MOV EAX,1
004FE013 |> 5F POP EDI
004FE014 |. 5E POP ESI
004FE015 |. 5B POP EBX
004FE016 |. 8BE5 MOV ESP,EBP
004FE018 |. 5D POP EBP
004FE019 \. C3 RETN
(STOP)
[继续GS模块][汇编到VC++]第二
004FDA9D . 6A 6D PUSH 6D ; /TableName = 6D
004FDA9F . 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8] ; |
004FDAA2 . 52 PUSH EDX ; |hInst
004FDAA3 . FF15 D8A1B70A CALL DWORD PTR
DS:[<&USER32.LoadAccelera>; \LoadAcceleratorsA
hAccelTable = LoadAccelerators(hInstance,
(LPCTSTR)IDC_GAMESERVER);
==============================================
这里的代码都是和我的代码里粘出来的不是随便写的
开头这一段已经完全正常..里面的变量啊什么都是我反汇编翻译的
==================================================
00512B50 |. 6A 10 push 10 ; /Style =
MB_OK|MB_ICONHAND|MB_APPLMODAL
00512B52 |. 68 4C986600 push 0066984C ; |Title = "Error"
00512B57 |. 68 1CFF6600 push 0066FF1C ; |Text = "Cannot find M:\
Drive."
00512B5C |. 6A 00 push 0 ; |hOwner = NULL
00512B5E |. FF15 1082D906 call [<&USER32.MessageBoxA>] ;
\MessageBoxA
00512B15 |. 6A 10 push 10 ; /Style =
MB_OK|MB_ICONHAND|MB_APPLMODAL
00512B17 |. 68 4C986600 push 0066984C ; |Title = "Error"
00512B1C |. 68 50FF6600 push 0066FF50 ; |Text = "Webzen Mu Game
Server is already Running."
00512B21 |. 6A 00 push 0 ; |hOwner = NULL
00512B23 |. FF15 1082D906 call [<&USER32.MessageBoxA>] ;
\MessageBoxA
00512B3F |. 51 push ecx ; /pFindFileData = 0012FDD0
00512B40 |. 68 38FF6600 push 0066FF38 ; |FileName =
"M:\commonserver.cfg"
00512B45 |. FF15 DC7CD906 call [<&KERNEL32.FindFirstFileA>] ;
\FindFirstFileA
翻译下来为;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//-------------------------------变量常量声明-----------------------------------------------
char MutexName[0xFF]="WZ_MU_GS_MUTEX";
HANDLE MuteHandle=::CreateMutex(NULL,0,MutexName);
DWORD MutexErr=::GetLastError();
MSG msg;
HACCEL hAccelTable;
WIN32_FIND_DATA pFindFileData;
HANDLE FindFistFileHandle=NULL;
//---------------------------------------开始代码------------------------------------------------
if(MutexErr==0x0B7)
{
::CloseHandle(MuteHandle);
MessageBox(NULL,"Webzen Mu Game Server is already
Running.","Error",MB_OK|MB_ICONHAND|MB_APPLMODAL);
return 0;
}
if(gLanguage==0)
{
FindFistFileHandle=::FindFirstFile("M:\\commonserver.cfg",&pFindFileData);
if(FindFistFileHandle==INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"Cannot find M:\\
Drive.","Error",MB_OK|MB_ICONHAND|MB_APPLMODAL);
FindClose(FindFistFileHandle);
return 0;
}
LoadString(hInstance, GameServer, szTitle, Count);
LoadString(hInstance, GAMES, szWindowClass, Count);
MyRegisterClass(hInstance);
// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance,
(LPCTSTR)IDC_GAMESERVER);
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
GiocpInit();
return msg.wParam;
}
//------------------------------结束代码----------------------------------------------------------------
return 0;
}
void ReadServerInfo()
{
char RSIPath[0xFF]="..\\data\\Serverinfo.dat";
IsFile(&RSIPath[0]);
//装载信息配置:
GetPrivateProfileString("GameServerInfo","ServerName","",szServerName,50,RSIPath);
gGameServerCode=
::GetPrivateProfileInt("GameServerInfo","ServerCode",0,RSIPath);
bCanConnectMember=::GetPrivateProfileInt("GameServerInfo","ConnectMemberLoad",0,RSIPath);
return;
}
上面的代码汇编相近为:
004F5575 . 50 PUSH EAX ; /IniFileName
004F5576 . 6A 00 PUSH 0 ; |Default = 0
004F5578 . 68 00696100 PUSH GameServ.00616900 ; |Key =
"ServerType"
004F557D . 68 EC686100 PUSH GameServ.006168EC ; |Section =
"GameServerInfo"
004F5582 . FF15 D09CB70A CALL DWORD PTR
DS:[<&KERNEL32.GetPrivate>; \GetPrivateProfileIntA
004F5588 . A3 8CF0780A MOV DWORD PTR DS:[A78F08C],EAX
004F558D . 68 10696100 PUSH GameServ.00616910 ; ASCII
"commonserver.cfg"
004F5592 . B9 10ECFB09 MOV ECX,GameServ.09FBEC10
004F5597 . E8 7FDBF0FF CALL GameServ.0040311B
004F559C . 50 PUSH EAX ; /IniFileName
004F559D . 6A 00 PUSH 0 ; |Default = 0
004F559F . 68 E0686100 PUSH GameServ.006168E0 ; |Key =
"Partition"
004F55A4 . 68 EC686100 PUSH GameServ.006168EC ; |Section =
"GameServerInfo"
004F55A9 . FF15 D09CB70A CALL DWORD PTR
DS:[<&KERNEL32.GetPrivate>; \GetPrivateProfileIntA
004F55AF . A3 90F0780A MOV DWORD PTR DS:[A78F090],EAX
004F55B4 . 68 10696100 PUSH GameServ.00616910 ; ASCII
"commonserver.cfg"
004F55B9 . B9 10ECFB09 MOV ECX,GameServ.09FBEC10
004F55BE . E8 58DBF0FF CALL GameServ.0040311B
004F55C3 . 50 PUSH EAX ; /IniFileName
004F55C4 . 6A 00 PUSH 0 ; |Default = 0
004F55C6 . 68 D4686100 PUSH GameServ.006168D4 ; |Key =
"Language"
004F55CB . 68 EC686100 PUSH GameServ.006168EC ; |Section =
"GameServerInfo"
004F55D0 . FF15 D09CB70A CALL DWORD PTR
DS:[<&KERNEL32.GetPrivate>; \GetPrivateProfileIntA
004F55D6 . A3 B8F0780A MOV DWORD PTR DS:[A78F0B8],EAX
004F55DB . B9 1873B60A MOV ECX,GameServ.0AB67318
004F55E0 . E8 E2CFF0FF CALL GameServ.004025C7
004F55E5 . 68 F9254000 PUSH GameServ.004025F9
004F55EA . A1 8CF0780A MOV EAX,DWORD PTR DS:[A78F08C]
004F55EF . 50 PUSH EAX
004F55F0 . 68 685E4B09 PUSH GameServ.094B5E68
004F55F5 . 68 408C6200 PUSH GameServ.00628C40 ; ASCII "0.99.60T"
004F55FA . 6A 00 PUSH 0
004F55FC . 8A0D 90F0780A MOV CL,BYTE PTR DS:[A78F090]
004F5602 . 51 PUSH ECX
004F5603 . 8B15 B8F0780A MOV EDX,DWORD PTR DS:[A78F0B8]
004F5609 . 52 PUSH EDX
004F560A . B9 1873B60A MOV ECX,GameServ.0AB67318
004F560F . E8 F7DBF0FF CALL GameServ.0040320B
004F5614 . 90 NOP
004F5615 . 90 NOP
004F5616 . 90 NOP
004F5617 . 90 NOP
004F5618 . 90 NOP
004F5619 . 90909090 DD 90909090
004F561D 90 DB 90
004F561E . 90909090 DD 90909090
|