首页
社区
课程
招聘
[旧帖] [讨论]学呀么学会编啊 0.00雪花
发表于: 2008-1-25 11:36 2035

[旧帖] [讨论]学呀么学会编啊 0.00雪花

2008-1-25 11:36
2035
有时候看见看雪上有人发这种贴,一大堆的知识点,就不想看,到自己实践的时候才发现还得那些知识很有用,于是到处搜集。

1.LPSTR LPCSTR LPWSTR LPCWSTR区别
  LPSTR   一个32位的指向字符串的指针   
  LPCSTR   一个32位的指向字符串常量的指针   
  LPWSTR   一个32位的指向unicode字符串的指针   
  LPCWSTR   个32位的指向unicode字符串常量的指针   
   
  前面的L代表LONG,P就是指针的意思,C就是constant的意思   
  W是wide的意思,STR就是string的意思  
LPSTR = char *
LPCSTR = const char *
LPWSTR = wchar_t *
LPCWSTR = const wchar_t *
LPOLESTR = OLECHAR * = BSTR = LPWSTR(Win32)
LPCOLESTR = const OLECHAR * = LPCWSTR(Win32)

LPTSTR = _TCHAR *
LPCTSTR = const _TCHAR *
摘自

353K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4H3M7r3u0D9L8$3N6Q4x3X3g2U0L8$3#2Q4x3V1k6K6N6h3&6J5j5h3W2A6L8X3M7&6i4K6u0r3j5i4u0U0K9r3W2$3k6g2)9J5c8U0t1H3x3o6N6Q4x3V1j5H3x3#2)9J5c8U0l9%4i4K6u0r3x3e0V1K6y4e0q4Q4x3X3g2Z5

tml

2.句柄对用户来说一般就是一个void *类型的指针(或一个WORD32),

而在库函数实现里则把它转换为保存诸如实例状态等信息的数据结构指针

。在这种库提供的服务中,一般都要求用户先调用一个open函数以创建一

个实例,指向该实例的void *指针返回给用户,此后用户可调用该库中其

他函数对该实例进行操作,这些函数中第一个参数为那个open返回的句柄

,最后有一个close函数用于放弃对实例的使用,释放相关资源。
摘自545K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3y4I4N6h3q4*7K9r3W2Q4x3X3g2T1L8r3!0Y4K9r3!0E0k6g2)9J5k6h3y4F1i4K6u0r3M7r3!0K6N6s2y4Q4x3V1j5I4y4K6t1^5z5g2)9J5k6h3S2@1L8h3H3`.

3.int MessageBox(

    HWND hWnd, // handle of owner window
    LPCTSTR lpText, // address of text in message box
    LPCTSTR lpCaption, // address of title of message box
    UINT uType // style of message box
    );

   那么在汇编中我们就可以这样调用它:

push uType
push lpCaption
push lpText
push hWnd
call MessageBox

   大家要注意最右面的参数是最后一个进堆栈的,当然,我们不必这样

麻烦的调用一个 API,因为Masm中的一个宏语句不但帮助我们完成了所有

的压栈操作,还帮我们检查参数的个数是否正确,那就是 invoke 语句,

我们可以把上面的语句换成 invoke

MessageBox,hWnd,lpText,lpCaption,uType 就行了。如本程序中代入

实际参数就成了 invoke MessageBox,NULL,addr szText,addr

szCaption,MB_OK。
摘自e48K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0t1I4x3g2)9J5k6e0V1H3i4K6u0W2x3U0b7I4i4K6u0W2x3e0x3H3i4K6y4m8x3U0t1K6y4U0k6Q4x3V1k6$3K9h3g2%4i4K6u0W2j5i4y4H3i4K6y4r3k6X3W2D9k6g2)9K6c8o6p5$3
我明白了一点OD反汇编时把所有的宏语句都展开了,所以显示为很多push。

4.领空
所谓领空,实际上是指:在某一时刻,CPU 的 CS:IP(EIP) 所指向的某一段代码的所有者所在的区域。

Win32的可执行文件在加载后,系统将为它建立一个它自己的虚拟内存空间,即进程空间,其容量达4G。这4G的空间划分为了几个区域,对于win98和win2000是不尽相同的。
             Window2000       Windows98
NULL指针分配分区    0x00000000~0x0000ffff   0x00000000~0x00000fff
MS-DOS/Win16兼容分区 无             0x00001000~0x003fffff
用户分区        0x00010000~0x7ffeffff   0x00400000~0x7fffffff
禁止访问分区(64K)   0x7fff0000~0x7fffffff    无
共享(MMF)分区    无             0x80000000~0xbfffffff
内核方式分区       0x80000000~0xffffffff    0xc0000000~0xffffffff
(上表资料来自:《Windows核心编程》)

看汇编代码的窗口标题,是xx.exe还是nt.dll或者其他系统DLL文件!!!............

一般77xxxxxx等等的8位的就是系统领空
4*****的6位的就是程序领空
摘自看雪

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回