xp下GetLastError实现
来源:互联网 发布:威风堂堂软件下载 编辑:程序博客网 时间:2024/06/03 17:36
大家对这个win32 API一定很熟悉了,那就来看下他的实现:
0:001> x *!GetLastError //搜索符号地址7c830759 kernel32!GetLastError = <no type information>0:001> uf 7c830759 kernel32!GetLastError:7c830759 64a118000000 mov eax,dword ptr fs:[00000018h]7c83075f 8b4034 mov eax,dword ptr [eax+34h]7c830762 c3 ret先获得线程teb,然后从teb+0x34处获得DWORD值,这个值就是错误值。顺带看下线程TEB结构:
0:001> dt _teb @$tebntdll!_TEB +0x030 ProcessEnvironmentBlock : 0x7ffdd000 _PEB +0x034 LastErrorValue : 0xcb执行GetLastError验证一下结果是不是为0xcb:
0:000> gGetLastError:203写到这,想到teb+0x34是个内存值,调试时修改这个值应该也会影响GetLastError的返回值吧。思路是这样:单步进入GetLastError,当获得teb的值以后修改teb+0x34处的值,最后GetLastError的值由eax返回,试一下:
0:000> l-t //逐指令运行Source options are 0: None0:000> t //准备获得teb的地址ntdll!RtlGetLastWin32Error:7c92fe01 64a118000000 mov eax,dword ptr fs:[00000018h] fs:003b:00000018=7ffdd0000:000> t //ntdll!RtlGetLastWin32Error+0x6:7c92fe07 8b4034 mov eax,dword ptr [eax+34h] ds:0023:7ffdd034=000000cb0:000> r eax //获得teb地址eax=7ffdd0000:000> e 7ffdd000+0x34 ff //修改LastErrorValue0:000> teax=000000ff ebx=00000000 ecx=00000001 edx=00000000 esi=00000001 edi=01003678eip=7c92fe0a esp=0006ff50 ebp=0006ff7c iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246ntdll!RtlGetLastWin32Error+0x9:7c92fe0a c3 ret0:000> r eax //GetLastError的返回值eax=000000ff最后看下OutputDebugString(buff);的输出:0xFF(Hex)=255
0:000> gGetLastError:255
0 0
- xp下GetLastError实现
- GetLastError函数实现
- XP下实现自动登陆
- GetLastError
- GetLastError()
- GetLastError
- GetLastError
- GetLastError
- GetLastError
- GetLastError
- GetLastError
- GetLastError
- GetLastError
- GetLastError
- GetLastError
- GetLastError
- GetLastError
- GetLastError
- Debugging Heap corruption with Application Verifier and Debugdiag
- 滑动导航栏
- z-index详解
- 怎样一开始打开activity就启动google的下拉刷新(仿优酷的下拉刷新)
- static 函数和普通函数
- xp下GetLastError实现
- OSG中的智能指针
- android Activity崩溃日志收集
- 【转载】Java NIO算法理论与实践
- Hadoop生态系统概述
- CSS属性中Display与Visibility
- android删除一个view中的子view
- LeetCode---Count Numbers with Unique Digits解题分析
- android学习11#--基于回调的事件处理