鱼C论坛

 找回密码
 立即注册
查看: 1903|回复: 12

求汇编大神帮帮呀?这个问题困恼我两天了。

[复制链接]
发表于 2013-10-25 17:16:19 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 fishluo 于 2013-10-25 17:21 编辑
  1. #include <windows.h>  
  2. #include <d3d9.h>  
  3. #include <time.h>  
  4. #include <iostream>  
  5. using namespace std;  
  6.   
  7. #pragma comment(lib,"d3d9.lib")  
  8. #pragma comment(lib,"d3dx9.lib")  
  9.   
  10. //program settings  
  11. const string APPTITLE = "Direct3D_Windowed";  
  12. const int SCREENW = 1024;  
  13. const int SCREENH = 768;  
  14.   
  15. //Direct3D objects  
  16. LPDIRECT3D9 d3d = NULL;   
  17. LPDIRECT3DDEVICE9 d3ddev = NULL;   
  18.   
  19. bool gameover = false;  
  20.   
  21. //macro to detect key presses  
  22. #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)  
  23.   
  24.   
  25. /**
  26. ** Game initialization function
  27. **/  
  28. bool Game_Init(HWND window)  
  29. {  
  30.     MessageBox(window, "Game_Init", "BREAKPOINT", 0);  
  31.   
  32.     //initialize Direct3D  
  33.     d3d = Direct3DCreate9(D3D_SDK_VERSION);  
  34.     if (d3d == NULL)  
  35.     {  
  36.         MessageBox(window, "Error initializing Direct3D", "Error", MB_OK);  
  37.         return 0;  
  38.     }  
  39.   
  40.     //set Direct3D presentation parameters  
  41.     D3DPRESENT_PARAMETERS d3dpp;   
  42.     ZeroMemory(&d3dpp, sizeof(d3dpp));  
  43.     d3dpp.Windowed = TRUE;  
  44.     d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;  
  45.     d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;  
  46.     d3dpp.BackBufferCount = 1;  
  47.     d3dpp.BackBufferWidth = SCREENW;  
  48.     d3dpp.BackBufferHeight = SCREENH;  
  49.     d3dpp.hDeviceWindow = window;  
  50.   
  51.     //create Direct3D device  
  52.     d3d->CreateDevice(  
  53.         D3DADAPTER_DEFAULT,   
  54.         D3DDEVTYPE_HAL,   
  55.         window,  
  56.         D3DCREATE_SOFTWARE_VERTEXPROCESSING,  
  57.         &d3dpp,   
  58.         &d3ddev);  
  59.   
  60.     if (d3ddev == NULL)  
  61.     {  
  62.         MessageBox(window, "Error creating Direct3D device", "Error", MB_OK);  
  63.         return 0;  
  64.     }  
  65.   
  66.     return true;  
  67. }  
  68.   
  69. /**
  70. ** Game update function
  71. **/  
  72. void Game_Run(HWND hwnd)  
  73. {  
  74.     //make sure the Direct3D device is valid  
  75.     if (!d3ddev) return;  
  76.   
  77.     //clear the backbuffer to bright green  
  78.     d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,255,0), 1.0f, 0);  
  79.       
  80.     //start rendering  
  81.     if (d3ddev->BeginScene())  
  82.     {  
  83.         //do something?  
  84.       
  85.         //stop rendering  
  86.         d3ddev->EndScene();  
  87.   
  88.         //copy back buffer on the screen  
  89.         d3ddev->Present(NULL, NULL, NULL, NULL);  
  90.     }  
  91.   
  92.     //check for escape key (to exit program)  
  93.     if (KEY_DOWN(VK_ESCAPE))  
  94.         PostMessage(hwnd, WM_DESTROY, 0, 0);  
  95. }  
  96.   
  97. /**
  98. ** Game shutdown function
  99. **/  
  100. void Game_End(HWND hwnd)  
  101. {  
  102.     //display close message  
  103.     MessageBox(hwnd, "Program is about to end", "Game_End", MB_OK);  
  104.   
  105.     //free memory  
  106.     if (d3ddev) d3ddev->Release();  
  107.     if (d3d) d3d->Release();  
  108. }  
  109.   
  110.   
  111. /**
  112. ** Windows event handling function
  113. **/  
  114. LRESULT WINAPI WinProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )  
  115. {  
  116.     switch( msg )  
  117.     {  
  118.         case WM_DESTROY:  
  119.             gameover = true;  
  120.             PostQuitMessage(0);  
  121.             return 0;  
  122.     }  
  123.     return DefWindowProc( hWnd, msg, wParam, lParam );  
  124. }  
  125.   
  126. /**
  127. ** Main Windows entry function
  128. **/  
  129. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)  
  130. {  
  131.     //set the new window's properties  
  132.     //previously found in the MyRegisterClass function  
  133.     WNDCLASSEX wc;  
  134.     wc.cbSize = sizeof(WNDCLASSEX);   
  135.     wc.style         = CS_HREDRAW | CS_VREDRAW;  
  136.     wc.lpfnWndProc   = (WNDPROC)WinProc;  
  137.     wc.cbClsExtra     = 0;  
  138.     wc.cbWndExtra     = 0;  
  139.     wc.hInstance     = hInstance;  
  140.     wc.hIcon         = NULL;  
  141.     wc.hCursor       = LoadCursor(NULL, IDC_ARROW);  
  142.     wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);  
  143.     wc.lpszMenuName  = NULL;  
  144.     wc.lpszClassName = APPTITLE.c_str();  
  145.     wc.hIconSm       = NULL;  
  146.     RegisterClassEx(&wc);  
  147.   
  148.     //create a new window  
  149.     //previously found in the InitInstance function  
  150.     HWND window = CreateWindow( APPTITLE.c_str(), APPTITLE.c_str(),  
  151.        WS_OVERLAPPEDWINDOW,  
  152.        CW_USEDEFAULT, CW_USEDEFAULT,  
  153.        SCREENW, SCREENH,  
  154.        NULL, NULL, hInstance, NULL);  
  155.   
  156.     //was there an error creating the window?  
  157.     if (window == 0) return 0;  
  158.   
  159.     //display the window  
  160.     ShowWindow(window, nCmdShow);  
  161.     UpdateWindow(window);  
  162.       
  163.     //initialize the game  
  164.     if (!Game_Init(window)) return 0;  
  165.   
  166.   
  167.     // main message loop  
  168.     MSG message;  
  169.     while (!gameover)  
  170.     {  
  171.         if (PeekMessage(&message, NULL, 0, 0, PM_REMOVE))   
  172.         {  
  173.             TranslateMessage(&message);  
  174.             DispatchMessage(&message);  
  175.         }  
  176.   
  177.         Game_Run(window);  
  178.     }  
  179.   
  180.     Game_End(window);  
  181.   
  182.     return message.wParam;  
  183. }  
复制代码

//如何把这个C++代码。改为汇编。
//d3d9.dll 里面有没有这个CreateDevice 函数。为何PEID查找不到。
//汇编如何 调用 DirectX 组件,
//d3d9.h如何改为d3d9.inc
//有没有哪个大神 整理好这些 头文件了的
//大家帮帮我吧。:cry

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-25 17:28:53 | 显示全部楼层
谢谢啊啊啊啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-25 17:29:38 | 显示全部楼层
谢谢啊啊啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-26 14:15:27 | 显示全部楼层
楼主难道用编译器编不了么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-26 21:21:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-29 14:59:43 | 显示全部楼层
楼主试试用VC 编译器反汇编一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-31 21:40:51 | 显示全部楼层
直接生成exe程序,然后用IDA反汇编下吧,IDA生成的反汇编代码基本和源代码符合。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-13 17:21:03 | 显示全部楼层
福禄娃娃 发表于 2013-10-31 21:40
直接生成exe程序,然后用IDA反汇编下吧,IDA生成的反汇编代码基本和源代码符合。

求个 ASM调用COM组件对象。生成一个窗口的例子。版主大人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-13 17:27:58 | 显示全部楼层
这是c代码啊。楼主用vc调试啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-13 17:30:23 | 显示全部楼层
fishluo 发表于 2013-11-13 17:21
求个 ASM调用COM组件对象。生成一个窗口的例子。版主大人

你指的是win32汇编生成一个窗口的例子吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-24 20:44:04 | 显示全部楼层
福禄娃娃 发表于 2013-11-13 17:30
你指的是win32汇编生成一个窗口的例子吗?

我已经找到方法了!谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-26 12:57:31 | 显示全部楼层
我来看看代码的....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-12 12:29:02 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 04:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表