【PeDump小工具的制作】

功能展示
在这里插入图片描述

使用到的Win32API
HMODULE GetModuleHandle(LPCTSTR lpModuleName);           hInstance(进程句柄): dd  
从对话框模板资源创建模式对话框
INT_PTR DialogBoxParamA(
  [in, optional] HINSTANCE hInstance,
  [in]           LPCSTR    lpTemplateName,
  [in, optional] HWND      hWndParent,
  [in, optional] DLGPROC   lpDialogFunc,
  [in]           LPARAM    dwInitParam
);
HWND GetDlgItem([in, optional] HWND hDlg,[in] int  nIDDlgItem);   hWinEdit(富文本框句柄): dd
HICON LoadIconA([in, optional] HINSTANCE hInstance, [in] LPCSTR lpIconName);  
LRESULT SendMessage(
  [in] HWND   hWnd, //hWinMain(弹出窗口句柄):dd
  [in] UINT   Msg,
  [in] WPARAM wParam,
  [in] LPARAM lParam
);       把消息直接送到窗口过程处理
void RtlZeroMemory(
   void*  Destination, 
   size_t Length
);    用零填充内存块
LPSTR lstrcpyA(
  [out] LPSTR  lpString1, //szFont
  [in]  LPCSTR lpString2
);    将字符串复制到缓冲区。
BOOL GetOpenFileNameA(
  [in, out] LPOPENFILENAMEA unnamedParam1
);  创建一个“打开”对话框
BOOL GetOpenFileNameA(
  [in, out] LPOPENFILENAMEA unnamedParam1
);
HANDLE CreateFileA(
  [in]           LPCSTR                lpFileName,  //要打开的文件路径及名称名
  [in]           DWORD                 dwDesiredAccess,   
  [in]           DWORD                 dwShareMode,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in]           DWORD                 dwCreationDisposition,
  [in]           DWORD                 dwFlagsAndAttributes,
  [in, optional] HANDLE                hTemplateFile
);   创建或打开文件或 I/O 设备         local @hFile
DWORD GetFileSize(
  [in]            HANDLE  hFile,
  [out, optional] LPDWORD lpFileSizeHigh
);   
totalSize(文件大小):dd
HANDLE CreateFileMappingA(
  [in]           HANDLE                hFile,
  [in, optional] LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
  [in]           DWORD                 flProtect,
  [in]           DWORD                 dwMaximumSizeHigh,
  [in]           DWORD                 dwMaximumSizeLow,
  [in, optional] LPCSTR                lpName
);          local @hMapFile
LPVOID MapViewOfFile(
  [in] HANDLE hFileMappingObject,
  [in] DWORD  dwDesiredAccess,
  [in] DWORD  dwFileOffsetHigh,
  [in] DWORD  dwFileOffsetLow,
  [in] SIZE_T dwNumberOfBytesToMap
);
lpMemory(内存映像文件在内存的起始位置):(dd) 
将格式化的数据写入指定的缓冲区。
int WINAPIV wsprintfA(
  [out] LPSTR  unnamedParam1, //@bufTemp2
  [in]  LPCSTR unnamedParam2, //lpszFilterFmt4
        ...    
);

将一个字符串追加到另一个字符串。
LPSTR lstrcatA(
  [in, out] LPSTR  lpString1, //lpServicesBuffer
  [in]      LPCSTR lpString2 //@bufTemp2
);
int GetWindowTextLengthA(
  [in] HWND hWnd
);

变量的分类:

实现最终程序功能需求的变量


需要经过计算的变量

mov @dwCount,1                local @dwCount(计数)
mov @dwCount1,0               local @dwCount1(地址顺号)
mov esi,lpMemory
mov edi,offset bufDisplay(第三列ASCII码字符显示)                                  
wsprintf                              local @bufTemp2(第一列)
lstrcat                               lpServicesBuffer(所有内容):db 100
	xor edx,edx
	mov eax,totalSize
	mov ecx,16
	div ecx
	mov eax,16
	sub eax,edx
	xor edx,edx
	mov ecx,3
	mul ecx
	mov @dwBlanks,eax

感悟总结
1.程序的本质其实就是一个调用函数的过程,我们定义的全局变量,常量,局部变量都是为调用函数做准备,我们只需要关注函数执行后哪些变量发生了改变,对后面的函数调用有什么样的影响,以及变量在各种条件分支,循环分支等C++语法中的状态变化情况
2.如果我们需要看这个变量经过了什么数值变化,那么我们可以通过全局查找
3.任何一个程序都有它核心的一个功能,不管它有几个状态,都是为这个核心功能做准备,我们要找出在这些状态中决定这些状态之间切换的关键变量行为,这个非常非常关键,这些变量串联起了这个程序的始总,而遇到变量最好的方法是采用全局搜索查看所有引用的方式去定位到这个变量发生了什么样的状态变化

提出问题

1.变量在什么情况下应该消失和存在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值