mwc1586
mwc1586
关注数: 70
粉丝数: 35
发帖数: 306
关注贴吧数: 45
在keil中写程序到proteus出错是怎么回事有哪位大神真的
什么是内存 为程序分配内存。 什么是标准内存管理函数,它有什么用途,怎么使用它,为什么要使用它 什么堆管理函数,它有什么用途,为什么要使用它,为什么堆中还分为默认堆和私有堆,它们之间有什么区别 什么是虚拟内存管理函数,它有什么用途,为什么要用虚拟内存管理函数 什么是文件映射管理函数,它有什么用途,为什么要用文件映射管理函数 这么多内存管理函数,我怎么才知道什么时候用那个,怎么用它们 它们之间有什么区别
什么是内存 它们有什么用 么要为程序分配内存。 什么是标准内存管理函数,它有什么用途,怎么使用它,为什么要使用它 什么堆管理函数,它有什么用途,为什么要使用它,为什么堆中还分为默认堆和私有堆,它们之间有什么区别 什么是虚拟内存管理函数,它有什么用途,为什么要用虚拟内存管理函数 什么是文件映射管理函数,它有什么用途,为什么要用文件映射管理函数 这么多内存管理函数,我怎么才知道什么时候用那个,怎么用它们 它们之间有什么区别
对话框那里出错了 #include "1.h" //******************************************************* //全局变量和预定义 //******************************************************* HINSTANCE _iHinst; //******************************************************* //程序入口 //******************************************************* int WINAPI WinMain ( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd ) { _iHinst=hInstance; InitCommonControls();//调用函数注册控件库 _RegClassName (hInstance);//调用自定义函数注册窗口类名 _CreateWind (hInstance,nShowCmd);//调用自定义函数创建窗口 //消息循环 MSG _iMSG; while (GetMessage(&_iMSG,NULL,0,0)) { TranslateMessage (&_iMSG); DispatchMessage(&_iMSG); } return nShowCmd; } 《1.h》 #include <Windows.h> #include <Richedit.h> #include <Commctrl.h> #include "resource.h" //******************************************************* //全局变量和预定义 //******************************************************* PCHAR _iszCallName="WINDOW";//类名 extern HINSTANCE _iHinst; HWND _iHRICH;//编辑控件句柄,要定义全局的变量否则等会发送消息WM_SIZE消息时 要先处理这个消息 HMENU _HM; //******************************************************* //打开对话框窗口 //对OPENFILENAME初始化 //调用函数GetOpenFileName函数创建打开文件对话框 //******************************************************* VOID OpenDialog(HWND hWnd) { CHAR _iszCH[256]; PCHAR _iszCH1="*.*\0"; OPENFILENAME _iOFN; _iOFN.lStructSize=sizeof(_iOFN); _iOFN.hwndOwner=hWnd; _iOFN.lpstrFilter="All\0*.*\0Text\0*.TXT\0"; _iOFN.lpstrCustomFilter=_iszCH1; _iOFN.nMaxCustFilter=sizeof(_iszCH1); _iOFN.nFilterIndex=1; _iOFN.lpstrFile=_iszCH; _iOFN.nMaxFile=sizeof(_iszCH); _iOFN.lpstrInitialDir=NULL; _iOFN.lpstrDefExt="*.*\0"; _iOFN.lpstrTitle="打开文件"; _iOFN.Flags=OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_EXTENSIONDIFFERENT; GetOpenFileName(&_iOFN); } //******************************************************* //编辑控件函数 //调用LoadLibrary函数加载编辑控件的版本 //调用函数CreateWindow函数创建编辑控件,编辑控件的类名是RICHEDIT_CLASS //******************************************************* VOID _CreateRich(HINSTANCE hInstance,HWND hWnd) { LoadLibrary("RichEd20.dll");//加载编辑控件 _iHRICH=CreateWindow(RICHEDIT_CLASS,"",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_BORDER|ES_MULTILINE|ES_AUTOVSCROLL,0, 0,0,0,hWnd,NULL,hInstance,NULL); } //******************************************************* //对话框消息处理过程 //调用EndDialog函数退出对话框 //******************************************************* INT_PTR CALLBACK DialogProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_CLOSE: EndDialog (hWnd,NULL); break; } return 0;
为什么工具栏有的可以显示有的不能显示 本来是3个按钮的 怎么就一个按钮 而有时一个按钮也没有 好像是很不稳定一样 还有就是有时有按钮 但是没有图标 但是第一个按钮都很正常 就是后面的两个不稳定 一下是源代码 《1.h》 #include "resource.h"#include #include //****************************************************************//全局变量和预定义//****************************************************************PCHAR _iszWinCallName="WINDOW";#define ID_TOOLBAR 30025extern HINSTANCE _iHist; //****************************************************************//工具栏函数//****************************************************************HWND _CreateToolbar(HWND hWnd){TBBUTTON _iTT[]={{STD_FILENEW,ID_40001,TBSTATE_ENABLED,BTNS_BUTTON,0,0,(INT_PTR)"新建"},{STD_FILEOPEN,ID_40002,TBSTATE_ENABLED,BTNS_BUTTON,0,0,(INT_PTR)"打开"},{STD_FILESAVE,ID_40003,TBSTATE_ENABLED,BTNS_BUTTON,0,0,(INT_PTR)"保存"}}; HWND _iHTOO=CreateToolbarEx(hWnd,WS_CHILD|WS_VISIBLE|TBSTYLE_WRAPABLE|CCS_TOP|CCS_NOPARENTALIGN,ID_TOOLBAR,0,HINST_COMMCTRL,IDB_STD_SMALL_COLOR,_iTT,3,0,0,0,0,sizeof(_iTT)); return _iHTOO;}//****************************************************************//窗口消息处理函数//****************************************************************LRESULT CALLBACK _WinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){switch (uMsg){case WM_DESTROY:PostQuitMessage(0);break; case WM_CREATE://InitCommonControls();//注册通用控件库_CreateToolbar(hWnd);break;default:return DefWindowProc(hWnd,uMsg,wParam,lParam);}return 0;} //****************************************************************//窗口注册函数//****************************************************************int _RegisterCallName(HINSTANCE hInstance){WNDCLASS _iWL; _iWL.cbClsExtra=0; _iWL.cbWndExtra=0; _iWL.hbrBackground=(HBRUSH)COLOR_BTNSHADOW; _iWL.hCursor=LoadCursor(hInstance,IDC_ARROW); _iWL.hIcon=LoadIcon(hInstance,IDI_WARNING); _iWL.hInstance=hInstance; _iWL.lpfnWndProc=(WNDPROC)_WinProc; _iWL.lpszClassName=_iszWinCallName; _iWL.lpszMenuName=NULL; _iWL.style=CS_HREDRAW|CS_VREDRAW; return RegisterClass(&_iWL);} //****************************************************************//创建窗口函数//相关函数参数查看WinAPI帮助//返回窗口句柄//调用函数LoadMenu函数加载菜单//调用函数CreateWindow函数创建窗口//调用函数ShowWindow函数显示窗口函数//调用函数UpdateWindow函数更新窗口函数//****************************************************************HWND _CreateWindow(HINSTANCE hInstance,int nShowCmd){HMENU _iHMENU=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1)); HWND _iHWND=CreateWindow(_iszWinCallName,"",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,300,NULL,_iHMENU,hInstance,NULL); ShowWindow(_iHWND,nShowCmd);UpdateWindow(_iHWND); return _iHWND;} 《resource.h 》 //{{NO_DEPENDENCIES}}// Microsoft Visual C++ generated include file.// Used by 2.rc//#define IDR_MENU1 101#define ID_40001 40001#define ID_40002 40002#define ID_40003 40003#define ID_40004 40004 // Next default values for new objects// #ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_NEXT_RESOURCE_VALUE 102#define _APS_NEXT_COMMAND_VALUE 40005#define _APS_NEXT_CONTROL_VALUE 1001#define _APS_NEXT_SYMED_VALUE 101 #endif #endif 《1.cpp》 #include "1.h"//****************************************************************//预定义//**************************************************************** HINSTANCE _iHist;//****************************************************************//程序入口//****************************************************************int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd ){_iHist=hInstance; _RegisterCallName(hInstance);//调用自定义函数注册窗口类名_CreateWindow(hInstance,nShowCmd);//调用自定义函数创建窗口函数 MSG _iMSG;while (GetMessage(&_iMSG,NULL,0,0)){TranslateMessage(&_iMSG);DispatchMessage(&_iMSG);}return nShowCmd;}
HTML 类型问题 HTML 有多少种类型 怎么区分它们的类型 谢谢
想做个浏览器 想做个浏览器不知道怎么下手 有谁哟这方面的经验指点下
如何用c写浏览器 WinInet.h文件 CHAR *WinInet_(){CHAR *szBuffer=(CHAR*)malloc(sizeof(szBuffer)*16384); DWORD dwRead=0; HINTERNET HINT_InternetOpen=InternetOpen("WinInet",INTERNET_OPEN_TYPE_PROXY, NULL,NULL,INTERNET_FLAG_ASYNC); if (HINT_InternetOpen==NULL) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"InternetOpen出错!",MB_OK); } HINTERNET HINT_InternetConnect=InternetConnect(HINT_InternetOpen,"192.168.1.10",INTERNET_DEFAULT_HTTP_PORT, NULL,NULL,INTERNET_SERVICE_HTTP,0,0); if (HINT_InternetConnect==NULL) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"InternetConnect出错!",MB_OK); } //CHAR cHTTPVerb[]=("GET","POST","HEAD"); PCTSTR cHTTPAccept [] = {"*/*", NULL}; HINTERNET HINT_HttpOpenRequest=HttpOpenRequest(HINT_InternetConnect,"HEAD","/httpFileServer/HttpFileTrans.do", NULL,NULL,cHTTPAccept,INTERNET_FLAG_SECURE,0); if (HINT_HttpOpenRequest==NULL) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"HttpOpenRequest出错!",MB_OK); } BOOL BoolFalse=InternetReadFile(HINT_HttpOpenRequest,szBuffer,sizeof(szBuffer),&dwRead); if (BoolFalse==FALSE) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"InternetReadFile出错!",MB_OK); } return szBuffer;} Def.h文件 #include <Windows.h>#include "WinInet.h" extern HINSTANCE hinst;extern int nShow; extern char cError[50];//用于存储出错信息 LRESULT CALLBACK WindowProc(__in HWND hwnd,__in UINT uMsg,__in WPARAM wParam,__in LPARAM lParam);//声明窗口过程函数 //****************************************////定义自定义函数//注册窗口类//****************************************//BOOL RegisterWondowClass(HINSTANCE hInstance) //定义注册窗口类{WNDCLASS wnd;//注册窗口类名 wnd.cbClsExtra=0; wnd.cbWndExtra=0; wnd.hbrBackground=(HBRUSH)(COLOR_ACTIVECAPTION+2);//背景 wnd.hCursor=LoadCursor(hInstance,IDC_ARROW);//光标 wnd.hIcon=LoadIcon(hInstance,IDI_EXCLAMATION);//图标 wnd.hInstance=hInstance;//窗口实例句柄 wnd.lpfnWndProc=(WNDPROC)WindowProc;//窗口过程函数 wnd.lpszClassName="windowd";//窗口类名 wnd.lpszMenuName=NULL;//菜单无 wnd.style=CS_VREDRAW|CS_HREDRAW;//窗口显示样式 RegisterClass(&wnd); return TRUE;} //****************************************////定义自定义函数//创建父窗口//****************************************//HWND CreateWindow_hwnd(HINSTANCE hInstance,int nShowCmd)//定义创建窗口函数{HWND hwnd;//父窗口名 hwnd=CreateWindow("windowd","windowd !",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL);//创建窗口 if (hwnd==NULL) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"创建窗口出错!",MB_OK); return FALSE; } else { ShowWindow(hwnd,nShowCmd);//显示窗口 UpdateWindow(hwnd);//更新窗口 return hwnd;//返回窗口句柄 } } //****************************************////定义自定义函数//定义消息循环函数//****************************************//BOOL News_cycle(){MSG msg; while (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg);//转换消息 DispatchMessage(&msg);//分派消息 }return TRUE;} //****************************************////定义自定义函数//定义窗口过程函数//****************************************//LRESULT CALLBACK WindowProc(__in HWND hwnd,__in UINT uMsg,__in WPARAM wParam,__in LPARAM lParam)//声明窗口过程函数{ HDChdc;PAINTSTRUCT pai; switch(uMsg){case WM_PAINT: hdc=BeginPaint(hwnd,&pai); TextOut (hdc,0,0,WinInet_(),strlen(WinInet_())); EndPaint(hwnd,&pai); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam);}return 0;} .cpp文件 #include "Def.h" HINSTANCE hinst; char cError[50];//用于存储出错信息int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd ){ hinst=hInstance; if (RegisterWondowClass(hinst)==FALSE) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"注册窗口出错!",MB_OK); } if (CreateWindow_hwnd(hinst,nShowCmd)==NULL) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"创建窗口出错!",MB_OK); } if (News_cycle()==FALSE) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"消息循环出错!",MB_OK); } return 0;}
如何用c写浏览器 WinInet.h文件 CHAR *WinInet_(){CHAR *szBuffer=(CHAR*)malloc(sizeof(szBuffer)*16384); DWORD dwRead=0; HINTERNET HINT_InternetOpen=InternetOpen("WinInet",INTERNET_OPEN_TYPE_PROXY, NULL,NULL,INTERNET_FLAG_ASYNC); if (HINT_InternetOpen==NULL) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"InternetOpen出错!",MB_OK); } HINTERNET HINT_InternetConnect=InternetConnect(HINT_InternetOpen,"192.168.1.10",INTERNET_DEFAULT_HTTP_PORT, NULL,NULL,INTERNET_SERVICE_HTTP,0,0); if (HINT_InternetConnect==NULL) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"InternetConnect出错!",MB_OK); } //CHAR cHTTPVerb[]=("GET","POST","HEAD"); PCTSTR cHTTPAccept [] = {"*/*", NULL}; HINTERNET HINT_HttpOpenRequest=HttpOpenRequest(HINT_InternetConnect,"HEAD","/httpFileServer/HttpFileTrans.do", NULL,NULL,cHTTPAccept,INTERNET_FLAG_SECURE,0); if (HINT_HttpOpenRequest==NULL) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"HttpOpenRequest出错!",MB_OK); } BOOL BoolFalse=InternetReadFile(HINT_HttpOpenRequest,szBuffer,sizeof(szBuffer),&dwRead); if (BoolFalse==FALSE) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"InternetReadFile出错!",MB_OK); } return szBuffer;} Def.h文件 #include <Windows.h>#include "WinInet.h" extern HINSTANCE hinst;extern int nShow; extern char cError[50];//用于存储出错信息 LRESULT CALLBACK WindowProc(__in HWND hwnd,__in UINT uMsg,__in WPARAM wParam,__in LPARAM lParam);//声明窗口过程函数 //****************************************////定义自定义函数//注册窗口类//****************************************//BOOL RegisterWondowClass(HINSTANCE hInstance) //定义注册窗口类{WNDCLASS wnd;//注册窗口类名 wnd.cbClsExtra=0; wnd.cbWndExtra=0; wnd.hbrBackground=(HBRUSH)(COLOR_ACTIVECAPTION+2);//背景 wnd.hCursor=LoadCursor(hInstance,IDC_ARROW);//光标 wnd.hIcon=LoadIcon(hInstance,IDI_EXCLAMATION);//图标 wnd.hInstance=hInstance;//窗口实例句柄 wnd.lpfnWndProc=(WNDPROC)WindowProc;//窗口过程函数 wnd.lpszClassName="windowd";//窗口类名 wnd.lpszMenuName=NULL;//菜单无 wnd.style=CS_VREDRAW|CS_HREDRAW;//窗口显示样式 RegisterClass(&wnd); return TRUE;} //****************************************////定义自定义函数//创建父窗口//****************************************//HWND CreateWindow_hwnd(HINSTANCE hInstance,int nShowCmd)//定义创建窗口函数{HWND hwnd;//父窗口名 hwnd=CreateWindow("windowd","windowd !",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL);//创建窗口 if (hwnd==NULL) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"创建窗口出错!",MB_OK); return FALSE; } else { ShowWindow(hwnd,nShowCmd);//显示窗口 UpdateWindow(hwnd);//更新窗口 return hwnd;//返回窗口句柄 } } //****************************************////定义自定义函数//定义消息循环函数//****************************************//BOOL News_cycle(){MSG msg; while (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg);//转换消息 DispatchMessage(&msg);//分派消息 }return TRUE;} //****************************************////定义自定义函数//定义窗口过程函数//****************************************//LRESULT CALLBACK WindowProc(__in HWND hwnd,__in UINT uMsg,__in WPARAM wParam,__in LPARAM lParam)//声明窗口过程函数{ HDChdc;PAINTSTRUCT pai; switch(uMsg){case WM_PAINT: hdc=BeginPaint(hwnd,&pai); TextOut (hdc,0,0,WinInet_(),strlen(WinInet_())); EndPaint(hwnd,&pai); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam);}return 0;} .cpp文件 #include "Def.h" HINSTANCE hinst; char cError[50];//用于存储出错信息int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd ){ hinst=hInstance; if (RegisterWondowClass(hinst)==FALSE) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"注册窗口出错!",MB_OK); } if (CreateWindow_hwnd(hinst,nShowCmd)==NULL) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"创建窗口出错!",MB_OK); } if (News_cycle()==FALSE) { wsprintf(cError,"%d",GetLastError()); MessageBox(NULL,cError,"消息循环出错!",MB_OK); } return 0;}
如何用c写浏览器
汇编问题 assume cs:c_s,ds:d_s;定义数据段d_ssegmentdb 'Welcome to masm!';要显示的数据db 2h,24h,71h;字和背景色的属性d_sends;定义代码段c_ssegmenta:mov ax,d_smov ds,ax;指定源数据地址mov ax,0b800hmov es,ax;指定目的地址mov ax,0mov si,0mov di,0mov bp,0mov cx,3;循环行的次数s0:push cx;把循环行的次数入栈mov cx,16;循环列的次数s:push cx;把循环列的次数入栈mov al,ds:[si];数据给低位almov ah,ds:[16+di];属性给高位ahmov es:[720h+si+bp],ax;把ax寄存器中的字数据填充到es:[si]内存单元中inc si;si加1pop cx;循环列的次数出栈loop sinc di;di加1add bp,144pop cx;循环行的次数出栈loop s0mov ax,4c00hint 21hc_sendsend a 执行结果怎么没有字符啊 帮忙看看
那个老师帮忙看下这段代码 不能编译提示有块内存不读 #include <Windows.h> #include <stdio.h> int main() { //调用函数LoadLibrary时返回的模块句柄 //用IMAGE_DOS_HEADER结构体变量指针指向返回的模块句柄 LPCTSTR lpname="C:\\Documents and Settings\\Administrator\\桌面\\魂斗罗4\\魂斗罗4\\gens.exe"; HMODULE hmodule;//调用函数LoadLibrary时返回的模块句柄 hmodule=LoadLibrary(lpname); IMAGE_DOS_HEADER *image_dos;//dos头 IMAGE_NT_HEADERS *image_nt;//PE头 IMAGE_FILE_HEADER *image_file;//PE文件头 IMAGE_OPTIONAL_HEADER *image_optional;//PE可选文件 IMAGE_SECTION_HEADER *image_se;//数据块 IMAGE_IMPORT_DESCRIPTOR *image_import;//导入表结构体 //以下是为各个结构体分配内存 image_dos=(IMAGE_DOS_HEADER*)malloc(sizeof(hmodule)*1024);//为dos头分配内存 image_nt=(IMAGE_NT_HEADERS*)malloc(sizeof(image_nt)+sizeof(image_file)+sizeof(image_optional)*100);//为PE头分配内存 //以下是计算各个文件的入口 image_dos=(IMAGE_DOS_HEADER*)hmodule; image_nt=(IMAGE_NT_HEADERS*)((BYTE*)image_dos+image_dos->e_lfanew);//计算PE入口偏移值 image_file=&image_nt->FileHeader;//取得PE文件头的入口地址 image_optional=&image_nt->OptionalHeader;//取得PE可选文件的入口地址 //判断文件是不是可执行文件 if ((image_dos->e_magic!=0x5A4D)&&(image_dos->e_lfanew!=0x4550)) { printf("这不是一个可执行文件\n"); exit(0); } //打印数据 printf("DOS入口:%04X\n",image_dos->e_magic); printf("PE入口:%08X\n",image_nt->Signature); printf("CPU类型是:%04X\n",image_file->Machine); printf("加载的文件类型的签名是:%04X\n",image_optional->Magic); //为数据段分配内存 image_se=(IMAGE_SECTION_HEADER*)malloc(image_optional->SizeOfCode+image_optional->SizeOfInitializedData+sizeof(image_optional));//分配内存 //计算数据段的入口地址 //dos头加PE入口地址加偏移0x18字节加可选头的大小 image_se=(IMAGE_SECTION_HEADER*)((BYTE*)image_dos+image_dos->e_lfanew+0x18+image_file->SizeOfOptionalHeader); //打印数据段信息 DWORD dwVirtualAddress;//数据段的RVA DWORD dwPointerToRawData;//数据段的偏移地址 for (int i=0;i<image_file->NumberOfSections;i++,image_se++) { printf("数据表名称:%08s\n",image_se->Name); printf("数据表真实长度:%08X\n",image_se->Misc.VirtualSize); printf("数据表的 RVA 地址是:%08X\n",image_se->VirtualAddress); printf("数据表在文件中对齐后的尺寸是:%08X\n",image_se->SizeOfRawData); printf("数据表在文件中的偏移量是:%08X\n",image_se->PointerToRawData); printf("数据表在OBJ文件中使用,重定位的偏移是:%08X\n",image_se->PointerToRelocations); printf("数据表的偏移(供调试使用地)是:%08X\n",image_se->PointerToLinenumbers); printf("数据在OBJ文件中使用,重定位项数目是:%04X\n",image_se->NumberOfRelocations); printf("数据表中行号的数目是:%04X\n",image_se->NumberOfLinenumbers); printf("数据属性是:%08X\n\n",image_se->Characteristics); //计算导入表在那段 if (image_optional->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress>image_se->VirtualAddress) { dwVirtualAddress=image_se->VirtualAddress;//段的RVA地址 dwPointerToRawData=image_se->PointerToRawData;//段的偏移地址 } } //分配导入表信息 image_import=(IMAGE_IMPORT_DESCRIPTOR*)malloc(sizeof(image_import)*1024); image_import=(IMAGE_IMPORT_DESCRIPTOR*)((BYTE*)image_dos+image_dos->e_magic+image_optional->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress-dwVirtualAddress+dwPointerToRawData); printf("%08X\n",image_import->Name); free(image_dos);//释放内存 free(image_nt);//释放内存 free(image_optional);//释放内存 free(image_import);//释放内存 return 0; }
求内存偏移地址后面的值 已知内存偏移量98650H 求我要怎么读这个偏移量后的值 怎么把偏移指针指向这个地址 读取这个地址后值
怎么用ping 为什么能ping到自己的机器 不能ping别的机器 这是什么原因
阅读程序 以下是阅读解释的部分 不知道对不对请各位大侠多多帮忙指点指点不对的地方请帮忙改并加以说明原因谢谢 可能有点乱 应为用word软件改过的 #include <STDIO.H>// #include <WINSOCK2.H> // //IP报头结构 // typedef struct _iphdr { unsigned int h_len:4;//4位首部长度:指IP报头结构体的总字节长度:该域长度为4个字节(32位),一个IP报头最大长度是4*15=60个字节数,在没有可选域时IP报头长度是20个字节,所以通常值赋予5, 4*5=20(个字节) h_len=sizeof(IpHeader) 注释:《TCP_IP网络实验程序篇的51页》 unsigned int version:4;//4位IP版本号:指IP是属于那个版本的,(目前流行的是IPV4,版本4)(还有个版本是IPV6,版本6) version=4或version=6; unsigned char tos;//8位服务类型TOS:指在发送IP数据报时,为了向路由器表示服务的质量所使用的域 ? unsigned short total_len;//16位总长度(字节):是IP数据报和其它协议报在一起的长度,称为包的总长度 total_len=sizeof(IpHeader)+上一层协议的报头结构体; unsigned short ident;//16位标识:通常用进程(ID)号和线程(ID)号来表示这个值ident=GetCurrentProcessId或是ident=ident=GetCurrentProcessId unsigned short frag_and_flags;//3位标志位:? unsigned char ttl;//8位生存时间 TTL:指是IP数据报能通过多少个路由器,每通过一个路由器TTL值就减去1,直到TTL为零时,路由器就会丢弃这个IP报 ? unsigned char proto;//8位协议 (TCP, UDP 或其他):指的是上一层的协议(可以是TCP,UCP,ICMP,等协议) unsigned short checksum;//16位IP首部校验和:检查报头的好坏 unsigned int sourceIP;//32位源IP地址:自己主机的地址 unsigned int destIP;//32位目的IP地址:对方主机的地址 }IpHeader; // //ICMP报头结构 // typedef struct _icmphdr { BYTE i_type;//8位类型:指控制报文的消息类型 如:响应—请求消息类值是8,i_type=8; BYTE i_code;//8位代码 编码:值赋为0,i_code=0; USHORT i_cksum;//16位校验和:指检查数据报的好坏 USHORT i_id;//识别号(一般用进程号作为识别号):通常用进程(ID)号和线程(ID)号来表示这个值 i_id=GetCurrentProcessId或是 i_id =ident=GetCurrentProcessId USHORT i_seq;//报文序列号:记录发送端发送的是第几号包,包的编码 ULONG timestamp;//时间戳 ? }icmpHeader; // //计算效验和 // unsigned short shecksum(unsigned short *buff,int size) { u_long cksum=0; //将数据累加到cksum变量中 while(size>1) { cksum+=*buff++; size-=sizeof(USHORT); } //将cksum的高16位和低16位相加,取反后得到效验和 cksum=(cksum>>16)+(cksum&0xffff); cksum+=(cksum>>16); return (USHORT)(~cksum); } int main() { USHORT seq_no=0;//用于累加序列号,用于记录icmp包的编码 //加载库版本信息 WSADATA wsa; WSAStartup(MAKEWORD(2,2),&wsa);//调用函数WSAStartup加载库版本信息,第几个版本 //创建原始套接字
以下有两段相同的代码 执行结果不同 原因是什么 是怎么回事 急急.. #include <WINSOCK2.H> #include <STDIO.H> // //IP报头结构 // typedef struct _iphdr { unsigned int h_len:4; unsigned int version:4; unsigned char tos; unsigned short total_len; unsigned short ident; unsigned short frag_and_flags; unsigned char ttl; unsigned char proto; unsigned short checksum; unsigned int sourceIP; unsigned int destIP; }IpHeader; // //ICMP报头结构 // typedef struct _icmphdr { BYTE i_type; BYTE i_code; USHORT i_cksum; USHORT i_id; USHORT i_seq; ULONG timestamp; }icmpHeader; #define MAX_IP_HDR_SIZE 60 // unsigned short shecksum(unsigned short *buff,int size) { u_long cksum=0; //将数据累加到cksum变量中 while(size>1) { cksum+=*buff++; size-=sizeof(USHORT); } //将cksum的高16位和低16位相加,取反后得到效验和 cksum=(cksum>>16)+(cksum&0xffff); cksum+=(cksum>>16); return (USHORT)(~cksum); } // // // int main(int argc,char**argv) { WSADATA wsaData; USHORT seq_no=0; int dwrpte; //加载库版本信息 if (WSAStartup(MAKEWORD(2,2),&wsaData)!=0) { printf("加载库版本信息出错:%ld\n",GetLastError()); } ////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// //创建套接字 SOCKET sockRaw=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP); if (sockRaw==INVALID_SOCKET) { printf("套接字创建出错:%ld\n",WSAGetLastError()); } //设置超时值 int timeout=1000; if ((setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout)))==SOCKET_ERROR) { printf("设置出错:%ld\n",WSAGetLastError()); } // //填充要ping的地址 // SOCKADDR_IN dest; dest.sin_family=AF_INET; dest.sin_addr.S_un.S_addr=inet_addr("192.168.1.104"); // //创建ICMP数据包 // char buff[sizeof(icmpHeader)+32]; //填充数据 icmpHeader *icmp_hdr=NULL; icmp_hdr=(icmpHeader*)buff; icmp_hdr->i_type=8; icmp_hdr->i_code=0; icmp_hdr->i_id=(USHORT)GetCurrentProcessId(); icmp_hdr->i_cksum=0; icmp_hdr->i_seq=0; //填充数据部分,可以是任意的 memset(buff,'E',sizeof(icmpHeader)+sizeof(IpHeader));
1
下一页