﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-iniwf-随笔分类-反汇编</title><link>http://www.cppblog.com/iniwf/category/9911.html</link><description>风是温柔的，雨是伤心的，云是快乐的，月是多情的，爱是迷失的，恋是醉人的，情是难忘的，天是长久的，地是永恒的</description><language>zh-cn</language><lastBuildDate>Mon, 19 Apr 2010 03:56:34 GMT</lastBuildDate><pubDate>Mon, 19 Apr 2010 03:56:34 GMT</pubDate><ttl>60</ttl><item><title>内核反编译学习笔记6 passthru静态分析</title><link>http://www.cppblog.com/iniwf/archive/2010/04/18/112927.html</link><dc:creator>iniwf</dc:creator><author>iniwf</author><pubDate>Sun, 18 Apr 2010 11:26:00 GMT</pubDate><guid>http://www.cppblog.com/iniwf/archive/2010/04/18/112927.html</guid><wfw:comment>http://www.cppblog.com/iniwf/comments/112927.html</wfw:comment><comments>http://www.cppblog.com/iniwf/archive/2010/04/18/112927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/iniwf/comments/commentRss/112927.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iniwf/services/trackbacks/112927.html</trackback:ping><description><![CDATA[内核反编译学习笔记6
<p>passthru静态分析</p>
<p>来源：passthru.sys反汇编和源代码</p>
<p>一，导入的模块<br>二，模块要使用的函数<br>三，函数原型<br>四，文件中函数列表</p>
<p>有源代码，反汇编比源代码更简洁，特别是总揽方面，有优势。<br>有兴趣的话，可以把汇编和代码对应。我已经把函数内调用函数都罗列了。</p>
<p>////////////////////////////////////////////////</p>
<p>一，导入三个模块：<br>import Module:ntoskrnl.exe<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> HAL.dll<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NDIS.SYS</p>
<p>//////////////////////////////////////////////</p>
<p>二，每个模块导出函数：<br>我们有函数名，就可以bp 模块！函数&nbsp;<wbr> 下断了。<br>有的函数是被宏调用的，具体可以查看ndis.h中宏的定义。</p>
<p>ntoskrnl.exe:<br>KeBugCheckEx<br>KeTickCount<br>IoGetDeviceProperty<br>RtlCopyUnicodeString<br>RtlAppendUnicodeToString<wbr><br>IoCreateDevice<br>_vsnprint f<br>MmMapLockedPagesSpecifyC<wbr>ache<br>IoDeleteDevice<br>memcpy<br>IofCompleteRequest<br>memset<br>RtlInitUnicodeString<br>DbgPring<br>RtlAssert<br>RtlUnwind</p>
<p>HAL.dll:<br>KfReleaseSpinLock<br>KfAcquireSpinLock</p>
<p>接下来是重点了，ndis专用函数<br>NDIS.SYS:</p>
<p><br>NdisIMNotifyPnPEvent<br>NdisGetReceivedPacket<br>NdisDprAllocatePacket<br>NdisDprFreePacket<br>NdisDeregisterProtocol<br>NdisIMCancelInitializeDe<wbr>viceInstance<br>NdisReEnumerateProtocolB<wbr>indings<br>NdisFreeMemory<br>NdisOpenProtocolConfigur<wbr>ation<br>NdisReadConfiguration<br>NdisAllocateMemoryWithTa<wbr>g<br>NdisInitializeEvent<br>NdisAllocatePacketPoolEx<wbr><br>NdisPacketPoolUsage<br>NdisIMDeInitializeDevice<wbr>Instance<br>NdisCloseAdapter<br>NdisSetEvent<br>NdisMSetAttributesEx<br>NdisIMGetDeviceContext<br>NdisFreePacket<br>NdisIMCopySendCompletePe<wbr>rPacketInfo<br>NdisIMCopySendPerPacketI<wbr>nfo<br>NdisAllocatePacket<br>NdisIMGetCurrentPacketSt<wbr>ack<br>NdisRequest<br>NdisMIndicateStatusCompl<wbr>ete<br>NdisMIndicateStatus<br>NdisReturnPackets<br>NdisGetPoolFromPacket<br>NdisWaitEvent<br>NdisResetEvent<br>NdisCancelSendPackets<br>NdisFreePacketPool<br>NdisTerminateWrapper<br>NdisIMAssociateMiniport<br>NdisIMDeregisterLayeredM<wbr>iniport<br>NdisRegisterProtocol<br>NdisMRegisterUnloadHandl<wbr>er<br>NdisIMRegisterLayeredMin<wbr>iport<br>NdisInitializeWrapper<br>NdisMRegisterDevice<br>NdisMSleep<br>NdisMDeregisterDevice<br>NdisCloseConfiguration<br>NdisIMInitializeDeviceIn<wbr>stanceEx<br>NdisOpenAdapter</p>
<p>/////////////////////////////////////<br>三，函数原型：呵呵</p>
<p>NDIS_STATUS&nbsp;<wbr> NdisIMNotifyPnPEvent(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN&nbsp;<wbr> NDIS_HANDLE&nbsp;<wbr> MiniportHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN&nbsp;<wbr> PNET_PNP_EVENT&nbsp;<wbr> NetPnPEvent&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>PNDIS_PACKET&nbsp;<wbr>&nbsp;<wbr> NdisGetReceivedPacket(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_HANDLE&nbsp;<wbr> NdisBindingHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_HANDLE&nbsp;<wbr> MacContext&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisDprAllocatePacket(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_STATUS&nbsp;<wbr> Status,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_PACKET&nbsp;<wbr> *Packet,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> PoolHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisDprFreePacket(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_PACKET&nbsp;<wbr> Packet&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>NDIS_STATUS&nbsp;<wbr>&nbsp;<wbr> NdisIMCancelInitializeDe<wbr>viceInstance(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> DriverHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_STRING&nbsp;<wbr> DeviceInstance&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisReEnumerateProtocolB<wbr>indings(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> NdisProtocolHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisFreeMemory(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PVOID&nbsp;<wbr> VirtualAddress,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> Length,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> MemoryFlags&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisOpenProtocolConfigur<wbr>ation(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_STATUS&nbsp;<wbr> Status,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_HANDLE&nbsp;<wbr> ConfigurationHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_STRING&nbsp;<wbr> ProtocolSection&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisReadConfiguration(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_STATUS&nbsp;<wbr> Status,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_CONFIGURATION_PARAMETER&nbsp;<wbr> *ParameterValue,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> ConfigurationHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_STRING&nbsp;<wbr> Keyword,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_PARAMETER_TYPE&nbsp;<wbr> ParameterType&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>NDIS_STATUS&nbsp;<wbr> NdisAllocateMemoryWithTa<wbr>g(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PVOID&nbsp;<wbr> *VirtualAddress,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> Length,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN ULONG&nbsp;<wbr> Tag&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisInitializeEvent(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_EVENT&nbsp;<wbr> Event&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisAllocatePacketPoolEx<wbr>(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_STATUS&nbsp;<wbr> Status,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_HANDLE&nbsp;<wbr> PoolHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> NumberOfDescriptors,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> NumberOfOverflowDescript<wbr>ors,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> ProtocolReservedLength&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>UINT&nbsp;<wbr> NdisPacketPoolUsage(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> PoolHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>NDIS_STATUS&nbsp;<wbr> NdisIMDeInitializeDevice<wbr>Instance(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> NdisMiniportHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisCloseAdapter(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_STATUS&nbsp;<wbr> Status,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> NdisBindingHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisSetEvent(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_EVENT&nbsp;<wbr> Event&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr>&nbsp;<wbr> NdisMSetAttributesEx(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE MiniportAdapterHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE MiniportAdapterContext,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> CheckForHangTimeInSecond<wbr>s&nbsp;<wbr> OPTIONAL,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN ULONG&nbsp;<wbr> AttributeFlags,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_INTERFACE_TYPE AdapterType&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>NDIS_HANDLE&nbsp;<wbr> NdisIMGetDeviceContext(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> MiniportAdapterHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisFreePacket(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_PACKET&nbsp;<wbr> Packet&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisIMCopySendCompletePe<wbr>rPacketInfo(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_PACKET&nbsp;<wbr> DstPacket,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_PACKET&nbsp;<wbr> SrcPacket&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisIMCopySendPerPacketI<wbr>nfo(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_PACKET&nbsp;<wbr> DstPacket,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_PACKET&nbsp;<wbr> SrcPacket&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisAllocatePacket(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_STATUS&nbsp;<wbr> Status,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_PACKET&nbsp;<wbr> *Packet,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> PoolHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>PNDIS_PACKET_STACK&nbsp;<wbr> NdisIMGetCurrentPacketSt<wbr>ack(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_PACKET&nbsp;<wbr> Packet&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT BOOLEAN&nbsp;<wbr> *StacksRemaining&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisRequest(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_STATUS&nbsp;<wbr> Status,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> NdisBindingHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_REQUEST&nbsp;<wbr> NdisRequest&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr>&nbsp;<wbr> NdisMIndicateStatusCompl<wbr>ete(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> MiniportAdapterHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr>&nbsp;<wbr> NdisMIndicateStatus(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> MiniportAdapterHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_STATUS&nbsp;<wbr> GeneralStatus,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PVOID&nbsp;<wbr> StatusBuffer,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> StatusBufferSize&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisReturnPackets(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_PACKET&nbsp;<wbr> *PacketsToReturn,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> NumberOfPackets&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>NDIS_Handle&nbsp;<wbr> NdisGetPoolFromPacket(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_PACKET&nbsp;<wbr> Packet&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>BOOLEAN&nbsp;<wbr> NdisWaitEvent(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_EVENT&nbsp;<wbr> Event,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> MsToWait&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisResetEvent(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_EVENT&nbsp;<wbr> Event&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisCancelSendPackets(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> NdisBindingHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PVOID&nbsp;<wbr> CancelId&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisFreePacketPool(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> PoolHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisTerminateWrapper(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> NdisWrapperHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PVOID&nbsp;<wbr> SystemSpecific&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisIMAssociateMiniport(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> DriverHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> ProtocolHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr>&nbsp;<wbr> NdisIMDeregisterLayeredM<wbr>iniport(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> DriverHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisRegisterProtocol(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_STATUS&nbsp;<wbr> Status,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_HANDLE&nbsp;<wbr> NdisProtocolHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_PROTOCOL_CHARACTERISTICS&nbsp;<wbr> ProtocolCharacteristics,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> CharacteristicsLength&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisMRegisterUnloadHandl<wbr>er(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> NdisWrapperHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PDRIVER_UNLOAD&nbsp;<wbr> UnloadHandler&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>NDIS_STATUS&nbsp;<wbr> NdisIMRegisterLayeredMin<wbr>iport(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> NdisWrapperHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_MINIPORT_CHARACTERISTICS&nbsp;<wbr> MiniportCharacteristics,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> CharacteristicsLength,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_HANDLE&nbsp;<wbr> DriverHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>&nbsp;<wbr></p>
<p>NDIS_STATUS&nbsp;<wbr> NdisMRegisterDevice(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> NdisWrapperHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_STRING&nbsp;<wbr> DeviceName,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_STRING&nbsp;<wbr> SymbolicName,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PDRIVER_DISPATCH&nbsp;<wbr> MajorFunctions[],&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PDEVICE_OBJECT&nbsp;<wbr> *pDeviceObject,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT NDIS_HANDLE&nbsp;<wbr> *NdisDeviceHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisMSleep(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN ULONG&nbsp;<wbr> MicrosecondsToSleep&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>NDIS_STATUS&nbsp;<wbr> NdisMDeregisterDevice(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> NdisDeviceHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisCloseConfiguration(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> ConfigurationHandle&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>NDIS_STATUS&nbsp;<wbr> NdisIMInitializeDeviceIn<wbr>stanceEx(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> DriverHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_STRING&nbsp;<wbr> DriverInstance,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> DeviceContext&nbsp;<wbr> OPTIONAL&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>VOID&nbsp;<wbr> NdisOpenAdapter(&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_STATUS&nbsp;<wbr> Status,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_STATUS&nbsp;<wbr> OpenErrorStatus,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PNDIS_HANDLE&nbsp;<wbr> NdisBindingHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> OUT PUINT&nbsp;<wbr> SelectedMediumIndex,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_MEDIUM&nbsp;<wbr> MediumArray,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> MediumArraySize,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> NdisProtocolHandle,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN NDIS_HANDLE&nbsp;<wbr> ProtocolBindingContext,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PNDIS_STRING&nbsp;<wbr> AdapterName,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN UINT&nbsp;<wbr> OpenOptions,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IN PSTRING&nbsp;<wbr> AddressingInformation&nbsp;<wbr> OPTIONAL,&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> );</p>
<p>&nbsp;<wbr></p>
<p>///////////////////////////////////////</p>
<p>四，文件中函数列表<br>常用的就不在函数内罗列了<br>NdisZeroMemory<br>NdisMoveMemory<br>NdisFreeMemory<br>NdisMSleep<br>NdisInitUnicodeString<br>NdisAcquireSpinLock<br>NdisReleaseSpinLock<br>NdisFreeSpinLock<br>&nbsp;<wbr></p>
<p><br>1，passthru.c:<br>&nbsp;<wbr>&nbsp;<wbr> DriverEntry<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 其中大概用了下面这些：<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisAllocateSpinLock<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMInitializeWrapper<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMRegisterLayeredMin<wbr>iport<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisRegisterProtocol<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMAssociateMiniport<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p>
<p>&nbsp;<wbr>&nbsp;<wbr> PtRegisterDevice</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMRegisterDevice<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtDispatch<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IoGetCurrentIrpStackLoca<wbr>tion<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IoCompleteRequest<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtDeregisterDevice</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtUnload<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PtUnloadProtocol<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMDeregisterLayeredM<wbr>iniport</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>2，miniport.c<br>&nbsp;<wbr>&nbsp;<wbr> MPInitialize<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMSetAttributesEx<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PtRegisterDevice<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisSetEvent</p>
<p>&nbsp;<wbr>&nbsp;<wbr> MPSend<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMGetCurrentPacketSt<wbr>ack<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisSend<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisAllocatePacket<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisFreePacket<br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> MPSendPackets<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMSendComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMGetCurrentPacketSt<wbr>ack<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisSend<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisAllocatePacket<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisGetPacketFlags<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMCopySendPerPacketI<wbr>nfo<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> MPQueryInformation<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisRequest<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PtRequestComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> MPQueryPNPCapabilities<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> MPSetInformation<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> MPProcessSetPowerOid<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> MPProcessSetPowerOid<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMIndicateStatus<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMIndicateStatusCompl<wbr>ete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> MPReturnPacket<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisGetPoolFromPacket<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisReturnPackets<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisFreePacket<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> MPTransferData<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IsIMDeviceStateOn<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisTransferData<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PtDeregisterDevice<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisResetEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PtDereferenceAdapt<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> MPCancelSendPackets<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisCancelSendPackets<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> MPDevicePnPEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> MPAdapterShutdown<br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> MPFreeAllPacketPools<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisFreePacketPool<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>3，protocol.c<br>&nbsp;<wbr>&nbsp;<wbr> PtBindAdapter<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisOpenProtocolConfigur<wbr>ation<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisReadConfiguration<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisAllocateMemoryWithTa<wbr>g<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisInitializeEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisAllocatePacketPoolEx<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisOpenAdapter<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisWaitEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PtReferenceAdapt<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisInitializeEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMInitializeDeviceIn<wbr>stanceEx<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PtDereferenceAdapt<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisCloseConfiguration<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisCloseAdapter<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtOpenAdapterComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisSetEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtUnbindAdapter<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PtRequestComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMCancelInitializeDe<wbr>viceInstance<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisWaitEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMDeInitializeDevice<wbr>Instance<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisResetEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisCloseAdapter<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisWaitEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> MPFreeAllPacketPools&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtUnloadProtocol<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisDeregisterProtocol<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> IoDeleteDevice<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtCloseAdapterComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisSetEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtResetComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtRequestComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMQueryInformationCom<wbr>plete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMSetInformationCompl<wbr>ete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtStatus<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMIndicateStatus<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtStatusComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMIndicateStatusCompl<wbr>ete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtSendComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisGetPoolFromPacket<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMSendComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisDprFreePacket<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtTransferDataComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMTransferDataComplet<wbr>e<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtReceive<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisGetReceivedPacket<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisDprAllocatePacket<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMIndicateReceivePack<wbr>et<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisDprFreePacket<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMEthIndicateReceive<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMTrIndicateReceive<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMFddiIndicateReceive<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtReceiveComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> KeGetCurrentProcessorNum<wbr>ber<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMTrIndicateReceiveCo<wbr>mplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMFddiIndicateReceive<wbr>Complete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtReceivePacket<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMGetCurrentPacketSt<wbr>ack<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisMIndicateReceivePack<wbr>et<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisDprFreePacket<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtPNPHandler<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PtPnPNetEventSetPower<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PtPnPNetEventReconfigure<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMNotifyPnPEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtPnPNetEventReconfigure<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisReEnumerateProtocolB<wbr>indings<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMNotifyPnPEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtPnPNetEventSetPower<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisIMNotifyPnPEvent<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PtRequestComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisPacketPoolUsage<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> NdisRequest<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> PtRequestComplete<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> PtReferenceAdapt<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> MPFreeAllPacketPools<br><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><br><wbr><br></p>
<img src ="http://www.cppblog.com/iniwf/aggbug/112927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iniwf/" target="_blank">iniwf</a> 2010-04-18 19:26 <a href="http://www.cppblog.com/iniwf/archive/2010/04/18/112927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内核反编译学习笔记5</title><link>http://www.cppblog.com/iniwf/archive/2010/04/18/112926.html</link><dc:creator>iniwf</dc:creator><author>iniwf</author><pubDate>Sun, 18 Apr 2010 11:25:00 GMT</pubDate><guid>http://www.cppblog.com/iniwf/archive/2010/04/18/112926.html</guid><wfw:comment>http://www.cppblog.com/iniwf/comments/112926.html</wfw:comment><comments>http://www.cppblog.com/iniwf/archive/2010/04/18/112926.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/iniwf/comments/commentRss/112926.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iniwf/services/trackbacks/112926.html</trackback:ping><description><![CDATA[<p>其实这是以前内容的复习，另外再通过dt 数据来获取结构和偏移量，手工在windbg中查看信息</p>
<p>程序：bz6</p>
<p>以前的驱动程序简直毫无驱动的样子，现在用个稍微健全的例子：</p>
<p>NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)<br>{<br>&nbsp;<wbr>NTSTATUS status;<br>&nbsp;<wbr><br>#if DBG<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> _asm int 3<br>#endif</p>
<p>&nbsp;<wbr>driver-&gt;DriverUnload = DriverUnload;<br>&nbsp;<wbr><br>&nbsp;<wbr>status = CreateDevice(driver);<br>&nbsp;<wbr><br>&nbsp;<wbr>Dump(driver);<br>&nbsp;<wbr><br>&nbsp;<wbr>return status;<br>}</p>
<p>CreateDevice(driver)是自定义函数，用来真正建立一个驱动设备。返回一个status，猜猜看，我们能不能在eax中读取返回值。</p>
<p>反汇编先：<br>kd&gt; uf bz6!driverentry<br>bz6!DriverEntry [d:\mydriver\bz6\bz6.c @ 110]:<br>&nbsp;<wbr> 110 f8428680 8bff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edi,edi<br>&nbsp;<wbr> 110 f8428682 55&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr> 110 f8428683 8bec&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp<br>&nbsp;<wbr> 110 f8428685 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx<br>&nbsp;<wbr> 114 f8428686 cc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> int&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 3<br>&nbsp;<wbr> 121 f8428687 8b4508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]<br>&nbsp;<wbr> 121 f842868a c74034d08442f8&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [eax+34h],offset bz6!DriverUnload (f84284d0)<br>&nbsp;<wbr> 123 f8428691 8b4d08&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp+8]<br>&nbsp;<wbr> 123 f8428694 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx<br>&nbsp;<wbr> 123 f8428695 e876fdffff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!CreateDevice (f8428410)<br>&nbsp;<wbr> 123 f842869a 8945fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-4],eax<br>&nbsp;<wbr> 125 f842869d 8b5508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ebp+8]<br>&nbsp;<wbr> 125 f84286a0 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx<br>&nbsp;<wbr> 125 f84286a1 e8aafeffff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!Dump (f8428550)<br>&nbsp;<wbr> 127 f84286a6 8b45fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-4]<br>&nbsp;<wbr> 128 f84286a9 8be5&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,ebp<br>&nbsp;<wbr> 128 f84286ab 5d&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr> 128 f84286ac c20800&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ret&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 8</p>
<p>我们在源程序或Disassembly窗口在调用处F9下断，按g运行：</p>
<p>kd&gt; g<br>Breakpoint 0 hit<br>bz6!DriverEntry+0x15:<br>f8428695 e876fdffff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!CreateDevice (f8428410)<br>kd&gt; d eax<br>81e64f38&nbsp;<wbr> 04 00 a8 00 00 00 00 00-02 00 00 00 00 80 42 f8&nbsp;<wbr> ..............B.<br>81e64f48&nbsp;<wbr> 00 0c 00 00 b8 f3 d5 81-e0 4f e6 81 16 00 16 00</p>
<p>没错，返回值是04。</p>
<p>Dump(driver)是显示driver和device的一个函数，里面有个循环。<br>我们看看非玩具状态（呵呵，以前的函数毫无实用价值）下反汇编以后是什么样子。</p>
<p>void Dump(IN PDRIVER_OBJECT&nbsp;<wbr>pDriverObject)<br>{<br>&nbsp;<wbr>ULONG i=1;<br>&nbsp;<wbr>PDEVICE_OBJECT pDevice = pDriverObject-&gt;DeviceObject;<br>&nbsp;<wbr>KdPrint(("----------------------------------------------\n"));<br>&nbsp;<wbr>KdPrint(("Begin Dump...\n"));<br>&nbsp;<wbr>KdPrint(("Driver Address:0X%08X\n",pDriverObject));<br>&nbsp;<wbr>KdPrint(("Driver name:%wZ\n",&amp;pDriverObject-&gt;DriverName));<br>&nbsp;<wbr>KdPrint(("Driver HardwareDatabase:%wZ\n",pDriverObject-&gt;HardwareDatabase));<br>&nbsp;<wbr>KdPrint(("Driver first device:0X%08X\n",pDriverObject-&gt;DeviceObject));<br>&nbsp;<wbr><br>&nbsp;<wbr><br>&nbsp;<wbr><br>&nbsp;<wbr>for (;pDevice!=NULL;pDevice = pDevice-&gt;NextDevice)<br>&nbsp;<wbr>{<br>&nbsp;<wbr>&nbsp;<wbr>KdPrint(("The %d device\n",i++));<br>&nbsp;<wbr>&nbsp;<wbr>KdPrint(("Device AttachedDevice:0X%08X\n",pDevice-&gt;AttachedDevice));<br>&nbsp;<wbr>&nbsp;<wbr>KdPrint(("Device NextDevice:0X%08X\n",pDevice-&gt;NextDevice));<br>&nbsp;<wbr>&nbsp;<wbr>KdPrint(("Device StackSize:%d\n",pDevice-&gt;StackSize));<br>&nbsp;<wbr>&nbsp;<wbr>KdPrint(("Device's DriverObject:0X%08X\n",pDevice-&gt;DriverObject));<br>&nbsp;<wbr>}<br>&nbsp;<wbr><br>&nbsp;<wbr>KdPrint(("Dump over!\n"));<br>&nbsp;<wbr>KdPrint(("----------------------------------------------\n"));<br>}</p>
<p>////////////////////////////////////<br>反汇编：<br>kd&gt; uf bz6!dump<br>bz6!Dump [d:\mydriver\bz6\bz6.c @ 82]:<br>&nbsp;<wbr>&nbsp;<wbr> 82 f8428550 8bff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edi,edi<br>&nbsp;<wbr>&nbsp;<wbr> 82 f8428552 55&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 82 f8428553 8bec&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp<br>&nbsp;<wbr>&nbsp;<wbr> 82 f8428555 83ec0c&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> sub&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,0Ch<br>&nbsp;<wbr>&nbsp;<wbr> 83 f8428558 c745f801000000&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-8],1<br>&nbsp;<wbr>&nbsp;<wbr> 84 f842855f 8b4508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 84 f8428562 8b4804&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [eax+4]<br>&nbsp;<wbr>&nbsp;<wbr> 84 f8428565 894dfc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-4],ecx<br>&nbsp;<wbr>&nbsp;<wbr> 85 f8428568 68608842f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f8428860)<br>&nbsp;<wbr>&nbsp;<wbr> 85 f842856d e842010000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr>&nbsp;<wbr> 85 f8428572 83c404&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,4<br>&nbsp;<wbr>&nbsp;<wbr> 86 f8428575 68508842f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f8428850)<br>&nbsp;<wbr>&nbsp;<wbr> 86 f842857a e835010000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr>&nbsp;<wbr> 86 f842857f 83c404&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,4<br>&nbsp;<wbr>&nbsp;<wbr> 87 f8428582 8b5508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 87 f8428585 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx<br>&nbsp;<wbr>&nbsp;<wbr> 87 f8428586 68308842f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f8428830)<br>&nbsp;<wbr>&nbsp;<wbr> 87 f842858b e824010000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr>&nbsp;<wbr> 87 f8428590 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr>&nbsp;<wbr> 88 f8428593 8b4508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 88 f8428596 83c01c&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,1Ch<br>&nbsp;<wbr>&nbsp;<wbr> 88 f8428599 50&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax<br>&nbsp;<wbr>&nbsp;<wbr> 88 f842859a 68108842f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f8428810)<br>&nbsp;<wbr>&nbsp;<wbr> 88 f842859f e810010000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr>&nbsp;<wbr> 88 f84285a4 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr>&nbsp;<wbr> 89 f84285a7 8b4d08&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 89 f84285aa 8b5124&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ecx+24h]<br>&nbsp;<wbr>&nbsp;<wbr> 89 f84285ad 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx<br>&nbsp;<wbr>&nbsp;<wbr> 89 f84285ae 68f08742f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f84287f0)<br>&nbsp;<wbr>&nbsp;<wbr> 89 f84285b3 e8fc000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr>&nbsp;<wbr> 89 f84285b8 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr>&nbsp;<wbr> 90 f84285bb 8b4508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 90 f84285be 8b4804&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [eax+4]<br>&nbsp;<wbr>&nbsp;<wbr> 90 f84285c1 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx<br>&nbsp;<wbr>&nbsp;<wbr> 90 f84285c2 68d08742f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f84287d0)<br>&nbsp;<wbr>&nbsp;<wbr> 90 f84285c7 e8e8000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr>&nbsp;<wbr> 90 f84285cc 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr>&nbsp;<wbr> 90 f84285cf eb09&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> jmp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!Dump+0x8a (f84285da)</p>
<p>bz6!Dump+0x81 [d:\mydriver\bz6\bz6.c @ 94]:<br>&nbsp;<wbr>&nbsp;<wbr> 94 f84285d1 8b55fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ebp-4]<br>&nbsp;<wbr>&nbsp;<wbr> 94 f84285d4 8b420c&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [edx+0Ch]<br>&nbsp;<wbr>&nbsp;<wbr> 94 f84285d7 8945fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-4],eax</p>
<p>bz6!Dump+0x8a [d:\mydriver\bz6\bz6.c @ 94]:<br>&nbsp;<wbr>&nbsp;<wbr> 94 f84285da 837dfc00&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> cmp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-4],0<br>&nbsp;<wbr>&nbsp;<wbr> 94 f84285de 7476&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> je&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!Dump+0x106 (f8428656)</p>
<p>bz6!Dump+0x90 [d:\mydriver\bz6\bz6.c @ 96]:<br>&nbsp;<wbr>&nbsp;<wbr> 96 f84285e0 8b4df8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp-8]<br>&nbsp;<wbr>&nbsp;<wbr> 96 f84285e3 894df4&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-0Ch],ecx<br>&nbsp;<wbr>&nbsp;<wbr> 96 f84285e6 8b55f4&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ebp-0Ch]<br>&nbsp;<wbr>&nbsp;<wbr> 96 f84285e9 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx<br>&nbsp;<wbr>&nbsp;<wbr> 96 f84285ea 68c08742f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f84287c0)<br>&nbsp;<wbr>&nbsp;<wbr> 96 f84285ef e8c0000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr>&nbsp;<wbr> 96 f84285f4 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr>&nbsp;<wbr> 96 f84285f7 8b45f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-8]<br>&nbsp;<wbr>&nbsp;<wbr> 96 f84285fa 83c001&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,1<br>&nbsp;<wbr>&nbsp;<wbr> 96 f84285fd 8945f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-8],eax<br>&nbsp;<wbr>&nbsp;<wbr> 97 f8428600 8b4dfc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp-4]<br>&nbsp;<wbr>&nbsp;<wbr> 97 f8428603 8b5110&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ecx+10h]<br>&nbsp;<wbr>&nbsp;<wbr> 97 f8428606 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx<br>&nbsp;<wbr>&nbsp;<wbr> 97 f8428607 68a08742f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f84287a0)<br>&nbsp;<wbr>&nbsp;<wbr> 97 f842860c e8a3000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr>&nbsp;<wbr> 97 f8428611 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr>&nbsp;<wbr> 98 f8428614 8b45fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-4]<br>&nbsp;<wbr>&nbsp;<wbr> 98 f8428617 8b480c&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [eax+0Ch]<br>&nbsp;<wbr>&nbsp;<wbr> 98 f842861a 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx<br>&nbsp;<wbr>&nbsp;<wbr> 98 f842861b 68808742f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f8428780)<br>&nbsp;<wbr>&nbsp;<wbr> 98 f8428620 e88f000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr>&nbsp;<wbr> 98 f8428625 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr>&nbsp;<wbr> 99 f8428628 8b55fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ebp-4]<br>&nbsp;<wbr>&nbsp;<wbr> 99 f842862b 0fbe4230&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> movsx&nbsp;<wbr>&nbsp;<wbr> eax,byte ptr [edx+30h]<br>&nbsp;<wbr>&nbsp;<wbr> 99 f842862f 50&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax<br>&nbsp;<wbr>&nbsp;<wbr> 99 f8428630 68608742f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f8428760)<br>&nbsp;<wbr>&nbsp;<wbr> 99 f8428635 e87a000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr>&nbsp;<wbr> 99 f842863a 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr> 100 f842863d 8b4dfc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp-4]<br>&nbsp;<wbr> 100 f8428640 8b5108&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ecx+8]<br>&nbsp;<wbr> 100 f8428643 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx<br>&nbsp;<wbr> 100 f8428644 68408742f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f8428740)<br>&nbsp;<wbr> 100 f8428649 e866000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr> 100 f842864e 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr> 101 f8428651 e97bffffff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> jmp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!Dump+0x81 (f84285d1)</p>
<p>bz6!Dump+0x106 [d:\mydriver\bz6\bz6.c @ 103]:<br>&nbsp;<wbr> 103 f8428656 68308742f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f8428730)<br>&nbsp;<wbr> 103 f842865b e854000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr> 103 f8428660 83c404&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,4<br>&nbsp;<wbr> 104 f8428663 68608842f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz6! ?? ::FNODOBFM::`string' (f8428860)<br>&nbsp;<wbr> 104 f8428668 e847000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!DbgPrint (f84286b4)<br>&nbsp;<wbr> 104 f842866d 83c404&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,4<br>&nbsp;<wbr> 105 f8428670 8be5&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,ebp<br>&nbsp;<wbr> 105 f8428672 5d&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr> 105 f8428673 c20400&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ret&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 4</p>
<p><br>/////////////<br>我们简单数下源程序中的KdPrint，再比较call，6个call以后开始循环：<br>&nbsp;<wbr>&nbsp;<wbr> 94 f84285da 837dfc00&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> cmp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-4],0<br>&nbsp;<wbr>&nbsp;<wbr> 94 f84285de 7476&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> je&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz6!Dump+0x106 (f8428656)<br>&nbsp;<wbr>&nbsp;<wbr> ........<br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>//////<br>&nbsp;<wbr>开始手工看数据啦~~~<br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> 我们可以dt _driver_object来看数据结构<br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> kd&gt; dt _driver_object<br>ntdll!_DRIVER_OBJECT<br>&nbsp;<wbr>&nbsp;<wbr> +0x000 Type&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Int2B<br>&nbsp;<wbr>&nbsp;<wbr> +0x002 Size&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Int2B<br>&nbsp;<wbr>&nbsp;<wbr> +0x004 DeviceObject&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Ptr32 _DEVICE_OBJECT<br>&nbsp;<wbr>&nbsp;<wbr> +0x008 Flags&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Uint4B<br>&nbsp;<wbr>&nbsp;<wbr> +0x00c DriverStart&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Ptr32 Void<br>&nbsp;<wbr>&nbsp;<wbr> +0x010 DriverSize&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Uint4B<br>&nbsp;<wbr>&nbsp;<wbr> +0x014 DriverSection&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Ptr32 Void<br>&nbsp;<wbr>&nbsp;<wbr> +0x018 DriverExtension&nbsp;<wbr> : Ptr32 _DRIVER_EXTENSION<br>&nbsp;<wbr>&nbsp;<wbr> +0x01c DriverName&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : _UNICODE_STRING<br>&nbsp;<wbr>&nbsp;<wbr> +0x024 HardwareDatabase : Ptr32 _UNICODE_STRING<br>&nbsp;<wbr>&nbsp;<wbr> +0x028 FastIoDispatch&nbsp;<wbr>&nbsp;<wbr> : Ptr32 _FAST_IO_DISPATCH<br>&nbsp;<wbr>&nbsp;<wbr> +0x02c DriverInit&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Ptr32&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> long<br>&nbsp;<wbr>&nbsp;<wbr> +0x030 DriverStartIo&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Ptr32&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> void<br>&nbsp;<wbr>&nbsp;<wbr> +0x034 DriverUnload&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Ptr32&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> void<br>&nbsp;<wbr>&nbsp;<wbr> +0x038 MajorFunction&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : [28] Ptr32&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> long</p>
<p>显然是driver_object+10会得到DriverSize，那我们手工查看一下。</p>
<p>从反汇编窗口其实已经在代码后有提示了。<br>我们dd ebp+8可以获得driver_object的地址，在这个地址上+10（dd driver_object地址+10就可以了，当然也可以直接dd 算好的地址）：<br>kd&gt; dd 81e64f38+10<br>81e64f48&nbsp;<wbr> 00000c00 81d5f3b8 81e64fe0 00160016</p>
<p>我们还可以进循环，看device_object的具体情况，先看下结构：</p>
<p>kd&gt; dt _device_object<br>ntdll!_DEVICE_OBJECT<br>&nbsp;<wbr>&nbsp;<wbr> +0x000 Type&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Int2B<br>&nbsp;<wbr>&nbsp;<wbr> +0x002 Size&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Uint2B<br>&nbsp;<wbr>&nbsp;<wbr> +0x004 ReferenceCount&nbsp;<wbr>&nbsp;<wbr> : Int4B<br>&nbsp;<wbr>&nbsp;<wbr> +0x008 DriverObject&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Ptr32 _DRIVER_OBJECT<br>&nbsp;<wbr>&nbsp;<wbr> +0x00c NextDevice&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Ptr32 _DEVICE_OBJECT<br>&nbsp;<wbr>&nbsp;<wbr> +0x010 AttachedDevice&nbsp;<wbr>&nbsp;<wbr> : Ptr32 _DEVICE_OBJECT<br>&nbsp;<wbr>&nbsp;<wbr> +0x014 CurrentIrp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Ptr32 _IRP<br>&nbsp;<wbr>&nbsp;<wbr> +0x018 Timer&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Ptr32 _IO_TIMER<br>&nbsp;<wbr>&nbsp;<wbr> +0x01c Flags&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Uint4B<br>&nbsp;<wbr>&nbsp;<wbr> +0x020 Characteristics&nbsp;<wbr> : Uint4B<br>&nbsp;<wbr>&nbsp;<wbr> +0x024 Vpb&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Ptr32 _VPB<br>&nbsp;<wbr>&nbsp;<wbr> +0x028 DeviceExtension&nbsp;<wbr> : Ptr32 Void<br>&nbsp;<wbr>&nbsp;<wbr> +0x02c DeviceType&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Uint4B<br>&nbsp;<wbr>&nbsp;<wbr> +0x030 StackSize&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Char<br>&nbsp;<wbr>&nbsp;<wbr> +0x034 Queue&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : __unnamed<br>&nbsp;<wbr>&nbsp;<wbr> +0x05c AlignmentRequirement : Uint4B<br>&nbsp;<wbr>&nbsp;<wbr> +0x060 DeviceQueue&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : _KDEVICE_QUEUE<br>&nbsp;<wbr>&nbsp;<wbr> +0x074 Dpc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : _KDPC<br>&nbsp;<wbr>&nbsp;<wbr> +0x094 ActiveThreadCount : Uint4B<br>&nbsp;<wbr>&nbsp;<wbr> +0x098 SecurityDescriptor : Ptr32 Void<br>&nbsp;<wbr>&nbsp;<wbr> +0x09c DeviceLock&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : _KEVENT<br>&nbsp;<wbr>&nbsp;<wbr> +0x0ac SectorSize&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Uint2B<br>&nbsp;<wbr>&nbsp;<wbr> +0x0ae Spare1&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Uint2B<br>&nbsp;<wbr>&nbsp;<wbr> +0x0b0 DeviceObjectExtension : Ptr32 _DEVOBJ_EXTENSION<br>&nbsp;<wbr>&nbsp;<wbr> +0x0b4 Reserved&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Ptr32 Void</p>
<p>在循环中下断，进去看数据：<br>kd&gt; dd 81d23b28<br>81d23b28&nbsp;<wbr> 00cc0003 00000000 81e64f38 00000000</p>
<p>对照看看：<br>+0x000 Type&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Int2B&nbsp;<wbr>&nbsp;<wbr> 00cc0003中的03<br>+0x002 Size&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> : Uint2B&nbsp;<wbr> 00cc0003中的cc</p>
<p>一般来说，如果内存中涉及堆栈，那么堆中放数据，栈中放数据指针......反正就这么慢慢看吧。</p>
<img src ="http://www.cppblog.com/iniwf/aggbug/112926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iniwf/" target="_blank">iniwf</a> 2010-04-18 19:25 <a href="http://www.cppblog.com/iniwf/archive/2010/04/18/112926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内核反编译学习笔记4</title><link>http://www.cppblog.com/iniwf/archive/2010/04/18/112925.html</link><dc:creator>iniwf</dc:creator><author>iniwf</author><pubDate>Sun, 18 Apr 2010 11:24:00 GMT</pubDate><guid>http://www.cppblog.com/iniwf/archive/2010/04/18/112925.html</guid><wfw:comment>http://www.cppblog.com/iniwf/comments/112925.html</wfw:comment><comments>http://www.cppblog.com/iniwf/archive/2010/04/18/112925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/iniwf/comments/commentRss/112925.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iniwf/services/trackbacks/112925.html</trackback:ping><description><![CDATA[<p>内核驱动反编译笔记4<br>if else啦</p>
<p>需要掌握：<br>if else在程序反汇编中的状态，用16进制编辑器修改程序</p>
<p>cmp&nbsp;<wbr> 比较<br>jbe&nbsp;<wbr> 小于等于<br>jmp&nbsp;<wbr> 无条件转移<br>shl&nbsp;<wbr> 数值左移：左移一位（shl&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,1）等于乘2，左移2位等于乘4<br>add&nbsp;<wbr> 加</p>
<p><br>需要了解：<br>jg,jl,jgl 大于，小于，大于等于<br>PUSH 入栈同时esp-4<br>POP&nbsp;<wbr> 出栈同时esp+4<br>用16进制编辑器修改程序</p>
<p>&nbsp;<wbr></p>
<p>命令(16进制代码)<br>JA/JNBE (77)　<br>JAE/JNB (73)&nbsp;<wbr><br>JB/JNAE (72)&nbsp;<wbr><br>JBE/JNA (76)&nbsp;<wbr><br>JG/JNLE (7F)&nbsp;<wbr><br>JGE/JNL (7D)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>JL/JNGE (7C)&nbsp;<wbr><br>JLE/JNG (7E)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p>
<p>&nbsp;<wbr></p>
<p>无需了解<br>call与ret对esp的影响<br>右移shr</p>
<p>正确的来说左移和右移操作是操作数乘于（或除于）2的平方（（SHL）n * 2 ^ 2、（SHR）n / 2 ^ 2)。<br>即操作数每向左或右移动一次都乘于或除于2一次。</p>
<p>文件校验和</p>
<p>/////////////</p>
<p><br>ULONG MyAdd1(ULONG u1,ULONG u2)<br>{<br>&nbsp;<wbr>ULONG u3;<br>&nbsp;<wbr>if (u1&gt;u2)<br>&nbsp;<wbr>&nbsp;<wbr>u3=u1*2;<br>&nbsp;<wbr>else<br>&nbsp;<wbr>&nbsp;<wbr>u3=u2*4;<br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>return u3+100;&nbsp;<wbr><br>&nbsp;<wbr><br>&nbsp;<wbr>}<br>&nbsp;<wbr><br>&nbsp;<wbr>使用：<br>MyAdd1(5,8)<br>////////////</p>
<p>&nbsp;<wbr></p>
<p><br>kd&gt; uf bz5!myadd1<br>bz5!MyAdd1 [d:\mydriver\bz5\bz5.c @ 7]:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 7 f8513490 8bff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edi,edi<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 7 f8513492 55&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 7 f8513493 8bec&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 7 f8513495 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //这里开始<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 9 f8513496 8b4508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ;5<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 9 f8513499 3b450c&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> cmp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+0Ch]&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ;将5与8比较<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 9 f851349c 760a&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> jbe&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz5!MyAdd1+0x18 (f85134a8)&nbsp;<wbr> ;小于等于就跳转到f85134a8运行</p>
<p>bz5!MyAdd1+0xe [d:\mydriver\bz5\bz5.c @ 10]:<br>&nbsp;<wbr>&nbsp;<wbr> 10 f851349e 8b4d08&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 10 f85134a1 d1e1&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> shl&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,1<br>&nbsp;<wbr>&nbsp;<wbr> 10 f85134a3 894dfc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-4],ecx<br>&nbsp;<wbr>&nbsp;<wbr> 11 f85134a6 eb09&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> jmp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz5!MyAdd1+0x21 (f85134b1)</p>
<p>bz5!MyAdd1+0x18 [d:\mydriver\bz5\bz5.c @ 12]:<br>&nbsp;<wbr>&nbsp;<wbr> 12 f85134a8 8b550c&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ebp+0Ch]&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ;8<br>&nbsp;<wbr>&nbsp;<wbr> 12 f85134ab c1e202&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> shl&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,2&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ;8*4<br>&nbsp;<wbr>&nbsp;<wbr> 12 f85134ae 8955fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-4],edx&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ;32</p>
<p>bz5!MyAdd1+0x21 [d:\mydriver\bz5\bz5.c @ 14]:<br>&nbsp;<wbr>&nbsp;<wbr> 14 f85134b1 8b45fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-4]&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ;32<br>&nbsp;<wbr>&nbsp;<wbr> 14 f85134b4 83c064&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,64h&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ;32+100&nbsp;<wbr> 准备返回<br>&nbsp;<wbr>&nbsp;<wbr> //赋值给eax作为返回值结束<br>&nbsp;<wbr>&nbsp;<wbr> 16 f85134b7 8be5&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,ebp<br>&nbsp;<wbr>&nbsp;<wbr> 16 f85134b9 5d&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 16 f85134ba c20800&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ret&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 8</p>
<p>最后运行结果：<br>kd&gt; g<br>x3 Result:132<br>!<br>当我把<br>&nbsp;<wbr> if (u1&gt;u2)<br>改为<br>&nbsp;<wbr> if (u1&lt;u2)&nbsp;<wbr><br>&nbsp;<wbr> &nbsp;<wbr><br>反汇编以后：<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 9 f8567499 3b450c&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> cmp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+0Ch]<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 9 f856749c 730a&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> jae&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz5!MyAdd1+0x18 (f85674a8)<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>运行结果:<br>kd&gt; g<br>x3 Result:110<br>!</p>
<p>内核反编译学习笔记4(下)附windbg常用命令</p>
<p>那么我们能否把原来的730a改为7f0a这样的手段，修改驱动的判断呢？</p>
<p>&nbsp;<wbr></p>
<p>当然可以，我们可以用ultraedit等编辑器，打开bz5.sys，搜索"3b450c"，下面的73改为自己需要的：<br>命令(16进制代码)<br>JA/JNBE (77)　<br>JAE/JNB (73)&nbsp;<wbr><br>JB/JNAE (72)&nbsp;<wbr><br>JBE/JNA (76)&nbsp;<wbr><br>JG/JNLE (7F)&nbsp;<wbr><br>JGE/JNL (7D)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>JL/JNGE (7C)&nbsp;<wbr><br>JLE/JNG (7E)&nbsp;<wbr></p>
<p>比如7F，保存，然后注册运行。没错，你会发现不能运行。</p>
<p>////////////////////////<br>解决方法：重新计算校验和并保存。<br>用loadPe就可以了，里面有校验和，旁边有个问号，重新计算以后别忘了保存，再确定，然后，阿弥陀佛。</p>
<p><br>1.基本调试控制<br>运行程序(Run): 快捷键:F5 命令:g<br>单步步入(Step In)： 快捷键:F8 命令:p<br>单步步过(Step Over): 快捷键:F10<br>运行到光标所在行： 快捷键:F7<br>执行到返回：gu<br>执行到指定地址：g [Address]<br>重新运行调试程序: 快捷键:Ctrl+Shift+F5(这个对驱动一般用不到)</p>
<p>2.断点<br>断点之于调试当然是非常重要的<br>常用命令：<br>bp [Address]or[Symbol] 在指定地址下断<br>可以使用地址或符号，如<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bp 80561259(Windbg默认使用16进制)<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bp MyDriver!GetKernelPath<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bp MyDriver!GetKernelPath+0x12<br>bp [Address] /p eprocess 仅当当前进程为eprocess时才中断<br>这个很常用，比如你bp nt!NtTerminateProcess,但是只想在某一进程触发此断点时才断下来，那就加上这个参数吧，因为内核中的代码是各个进程共用的，所以此命令很实用<br>bp [Address] /t ethread 仅当当前线程为ethread时才中断，用法跟/p参数类似<br>bu [Address]or[Symbol] 下一个未解析的断点(就是说这个断点需要延迟解析)<br>这个也很常用，比如我们的驱动名为MyDriver.sys,那么在驱动加载之前下断bu MyDriver!DriverEntry，<br>然后加载这个驱动时就可以断在驱动入口，并且这个是不需要调试符号支持的<br>bl 列出所有断点,L=List<br>bc[id] 清除断点，c=Clear,id是bl查看时的断点编号<br>bd[id] 禁用断点，d=Disable,id即断点编号<br>be[id] 启用断点，e=Enable,id为断点编号</p>
<p>3.查看和修改数据<br>调试中不可避免的要查看和修改数据<br>查看内存：<br>db/dw/dd/dq [Address]&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 字节/字/双字/四字方式查看数据<br>da/du [Address]&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ASCII字符串/Unicode字符串方式查看指定地址<br>其它常用的如查看结构<br>dt nt!_EPROCESS<br>dt nt!_EPROCESS 89330da0 (把0x89330da0作为对象指针)<br>修改内存：<br>eb/ew/ed/eq/ef/ep Address [Values]<br>字节/字/双字/四字/浮点数/指针/<br>ea/eu/eza/ezu Address [Values]<br>ASCII字符串/Unicode字符串/以NULL结尾的ASCII字符串/以NULL结尾的Unicode字符串<br>搜索内存：<br>s -[b/w/d/q/a/u] Range Target<br>搜索字节/字/双字/四字/ASCII字符串/Unicode字符串</p>
<p>4.寄存器<br>在用Windbg调试时可以Alt+4直接调出寄存器窗口，然后拖放到合适的位置就可以。<br>要修改呢就直接双击相应的项就可以了。<br>把命令的方式也说一下，比较简单：<br>r 显示所有寄存器的值<br>r eax 显示eax的值<br>r eax=1 修改eax的值为1</p>
<p>5.辅助命令<br>!process 显示当前进程信息<br>!process 0 0 显示当前所有进程(会有僵尸进程)<br>!process 1f4 显示pid为1f4的进程信息，后面也可以跟eprocess的值<br>!thread 显示当前线程信息<br>!thread<br>!process 1f4 显示tid为768的线程信息，后面也可以跟ethread的值<br>栈相关:<br>k 显示调用栈<br>kb 显示ebp和前3个参数<br>kp 以函数调用形式显示栈</p>
<p>&nbsp;<wbr></p>
<img src ="http://www.cppblog.com/iniwf/aggbug/112925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iniwf/" target="_blank">iniwf</a> 2010-04-18 19:24 <a href="http://www.cppblog.com/iniwf/archive/2010/04/18/112925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内核反编译学习笔记3</title><link>http://www.cppblog.com/iniwf/archive/2010/04/18/112924.html</link><dc:creator>iniwf</dc:creator><author>iniwf</author><pubDate>Sun, 18 Apr 2010 11:22:00 GMT</pubDate><guid>http://www.cppblog.com/iniwf/archive/2010/04/18/112924.html</guid><wfw:comment>http://www.cppblog.com/iniwf/comments/112924.html</wfw:comment><comments>http://www.cppblog.com/iniwf/archive/2010/04/18/112924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/iniwf/comments/commentRss/112924.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iniwf/services/trackbacks/112924.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>本节主要看全局变量和局部变量，程序越来越长，可以跳开查看。</p>
<p>全局变量在程序开始定义赋值的话，存放在Data块，Data块可以通过静态反汇编获得。<br>局部变量定义在函数内部，使用的时候需要类似sub&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,10h，开辟空间存放</p>
<p>需要掌握：<br>静态反汇编工具<br>变量存放地点<br>sub</p>
<p>简单了解：<br>读取全局变量的方法：1，获取全局变量存放地址。2，偏移量与实际内存地址关系。</p>
<p><br>不需了解：<br>w32asm反汇编以后，需要复制其中内容的，先保存为alf文件，再用文本读取程序打开。</p>
<p><br>所用程序：bz4</p>
<p><br>#include &lt;ntddk.h&gt;</p>
<p>ULONG au1,au2;<br>ULONG au3 = 7;<br>ULONG au4 = 9;</p>
<p>ULONG MyAdd1(ULONG u1,ULONG u2)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> return u1+u2;</p>
<p>}<br>&nbsp;<wbr><br>ULONG MyAdd2(ULONG u1,ULONG u2)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> ULONG u3;<br>&nbsp;<wbr>&nbsp;<wbr> u3 = u1+u2;<br>&nbsp;<wbr>&nbsp;<wbr> return u3;&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr></p>
<p>}</p>
<p>ULONG MyAdd3(ULONG u1,ULONG u2)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> ULONG u3,u4,u5,u6;<br>&nbsp;<wbr>&nbsp;<wbr> u3 = u1+u2;<br>&nbsp;<wbr>&nbsp;<wbr> u4 = u3+u1;<br>&nbsp;<wbr>&nbsp;<wbr> u5 = u1;<br>&nbsp;<wbr>&nbsp;<wbr> u6 = u1+u3;<br>&nbsp;<wbr>&nbsp;<wbr> return u3+u4+u5+u6;&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr></p>
<p>}</p>
<p><br>VOID DriverUnload(PDRIVER_OBJECT driver)<br>{<br>&nbsp;<wbr><br>&nbsp;<wbr>DbgPrint("unload&#8230;\r\n");<br>}</p>
<p><br>NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)<br>{<br>&nbsp;<wbr>ULONG x1 = 5;<br>&nbsp;<wbr>ULONG x2 = 8;<br>&nbsp;<wbr>ULONG x3 ;<br>&nbsp;<wbr><br>&nbsp;<wbr><br>#if DBG<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> _asm int 3<br>#endif<br>&nbsp;<wbr><br>&nbsp;<wbr><br>&nbsp;<wbr>au1 = MyAdd1(x1,x2);&nbsp;<wbr> //使用自定义函数，反汇编看看结果<br>&nbsp;<wbr><br>&nbsp;<wbr>DbgPrint("au1 Result:%d\n!",au1);<br>&nbsp;<wbr><br>&nbsp;<wbr>au2 = MyAdd2(x1,x2);&nbsp;<wbr> //使用自定义函数，反汇编看看结果<br>&nbsp;<wbr><br>&nbsp;<wbr>DbgPrint("au2 Result:%d\n!",au2);<br>&nbsp;<wbr><br>&nbsp;<wbr>x3 = MyAdd3(x1,x2);&nbsp;<wbr> //使用自定义函数，反汇编看看结果<br>&nbsp;<wbr><br>&nbsp;<wbr>DbgPrint("Result:%d\n!",x3);<br>&nbsp;<wbr><br>&nbsp;<wbr>DbgPrint("au3 Result:%d\n!",au3);<br>&nbsp;<wbr>DbgPrint("au4 Result:%d\n!",au4);<br>&nbsp;<wbr><br>&nbsp;<wbr>driver-&gt;DriverUnload = DriverUnload;<br>&nbsp;<wbr>return STATUS_SUCCESS;<br>}</p>
<p>接下来要用w32asm和windbg反汇编，看其中对应关系，都是从55F到5B1，显然一一对应，只是前面地址有偏移。<br>我们知道，Data Offset是Data数据段，存放的是全局变量。本程序全局变量是：<br>ULONG au3 = 7;<br>ULONG au4 = 9;<br>显然我们dd 00000700是看不到数据的，要dd f84f7700，等我们运行起来的时候，看看是不是</p>
<p><br>w32asm反汇编：</p>
<p><br>Code Offset = 00000480, Code Size = 00000200<br>Data Offset = 00000700, Data Size = 00000080<br>...............</p>
<p>:0001055F 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push edx</p>
<p>* Possible StringData Ref from Code Obj -&gt;"au1 Result:%d<br>!"<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> |<br>:00010560 6850060100&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push 00010650</p>
<p>* Reference To: ntoskrnl.DbgPrint, Ord:0030h<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> |<br>:00010565 E888000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Call 000105F2<br>:0001056A 83C408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add esp, 00000008<br>:0001056D 8B45FC&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov eax, dword ptr [ebp-04]<br>:00010570 50&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push eax<br>:00010571 8B4DF8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov ecx, dword ptr [ebp-08]<br>:00010574 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push ecx<br>:00010575 E836FFFFFF&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call 000104B0<br>:0001057A A310070100&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov dword ptr [00010710], eax<br>:0001057F 8B1510070100&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov edx, dword ptr [00010710]<br>:00010585 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push edx<br>:00010586 6840060100&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push 00010640<br></p>
<p>* Reference To: ntoskrnl.DbgPrint, Ord:0030h<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> |<br>:0001058B E862000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Call 000105F2<br>:00010590 83C408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add esp, 00000008<br>:00010593 8B45FC&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov eax, dword ptr [ebp-04]<br>:00010596 50&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push eax<br>:00010597 8B4DF8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov ecx, dword ptr [ebp-08]<br>:0001059A 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push ecx<br>:0001059B E830FFFFFF&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call 000104D0<br>:000105A0 8945F4&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov dword ptr [ebp-0C], eax<br>:000105A3 8B55F4&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov edx, dword ptr [ebp-0C]<br>:000105A6 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push edx</p>
<p>* Possible StringData Ref from Code Obj -&gt;"Result:%d<br>!"<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> |<br>:000105A7 6830060100&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push 00010630</p>
<p>* Reference To: ntoskrnl.DbgPrint, Ord:0030h<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> |<br>:000105AC E841000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> Call 000105F2<br>:000105B1 83C408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add esp, 00000008</p>
<p>&nbsp;<wbr></p>
<p><br>主函数中主要反汇编代码，也就是调用几个自定义函数的部分：</p>
<p>&nbsp;<wbr>&nbsp;<wbr> 57 f84f755f 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx<br>&nbsp;<wbr>&nbsp;<wbr> 57 f84f7560 6850764ff8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz4! ?? ::FNODOBFM::`string' (f84f7650)<br>&nbsp;<wbr>&nbsp;<wbr> 57 f84f7565 e888000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz4!DbgPrint (f84f75f2)<br>&nbsp;<wbr>&nbsp;<wbr> 57 f84f756a 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr>&nbsp;<wbr> 59 f84f756d 8b45fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-4]<br>&nbsp;<wbr>&nbsp;<wbr> 59 f84f7570 50&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax<br>&nbsp;<wbr>&nbsp;<wbr> 59 f84f7571 8b4df8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp-8]<br>&nbsp;<wbr>&nbsp;<wbr> 59 f84f7574 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx<br>&nbsp;<wbr>&nbsp;<wbr> 59 f84f7575 e836ffffff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz4!MyAdd2 (f84f74b0)<br>&nbsp;<wbr>&nbsp;<wbr> 59 f84f757a a310774ff8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [bz4!au2 (f84f7710)],eax<br>&nbsp;<wbr>&nbsp;<wbr> 61 f84f757f 8b1510774ff8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [bz4!au2 (f84f7710)]<br>&nbsp;<wbr>&nbsp;<wbr> 61 f84f7585 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx<br>&nbsp;<wbr>&nbsp;<wbr> 61 f84f7586 6840764ff8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz4! ?? ::FNODOBFM::`string' (f84f7640)<br>&nbsp;<wbr>&nbsp;<wbr> 61 f84f758b e862000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz4!DbgPrint (f84f75f2)<br>&nbsp;<wbr>&nbsp;<wbr> 61 f84f7590 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr>&nbsp;<wbr> 63 f84f7593 8b45fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-4]<br>&nbsp;<wbr>&nbsp;<wbr> 63 f84f7596 50&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax<br>&nbsp;<wbr>&nbsp;<wbr> 63 f84f7597 8b4df8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp-8]<br>&nbsp;<wbr>&nbsp;<wbr> 63 f84f759a 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx<br>&nbsp;<wbr>&nbsp;<wbr> 63 f84f759b e830ffffff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz4!MyAdd3 (f84f74d0)<br>&nbsp;<wbr>&nbsp;<wbr> 63 f84f75a0 8945f4&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-0Ch],eax<br>&nbsp;<wbr>&nbsp;<wbr> 65 f84f75a3 8b55f4&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ebp-0Ch]<br>&nbsp;<wbr>&nbsp;<wbr> 65 f84f75a6 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx<br>&nbsp;<wbr>&nbsp;<wbr> 65 f84f75a7 6830764ff8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz4! ?? ::FNODOBFM::`string' (f84f7630)<br>&nbsp;<wbr>&nbsp;<wbr> 65 f84f75ac e841000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz4!DbgPrint (f84f75f2)<br>&nbsp;<wbr>&nbsp;<wbr> 65 f84f75b1 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8</p>
<p><br>三个自定义函数</p>
<p>kd&gt; uf bz4!myadd1<br>bz4!MyAdd1 [d:\mydriver\bz4\bz4.c @ 9]:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 9 f84f7490 8bff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edi,edi<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 9 f84f7492 55&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 9 f84f7493 8bec&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp<br>&nbsp;<wbr>&nbsp;<wbr> 10 f84f7495 8b4508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 10 f84f7498 03450c&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+0Ch]<br>&nbsp;<wbr>&nbsp;<wbr> 12 f84f749b 5d&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 12 f84f749c c20800&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ret&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 8<br>kd&gt; uf bz4!myadd2<br>bz4!MyAdd2 [d:\mydriver\bz4\bz4.c @ 15]:<br>&nbsp;<wbr>&nbsp;<wbr> 15 f84f74b0 8bff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edi,edi<br>&nbsp;<wbr>&nbsp;<wbr> 15 f84f74b2 55&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 15 f84f74b3 8bec&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp<br>&nbsp;<wbr>&nbsp;<wbr> 15 f84f74b5 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx<br>&nbsp;<wbr>&nbsp;<wbr> 17 f84f74b6 8b4508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 17 f84f74b9 03450c&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+0Ch]<br>&nbsp;<wbr>&nbsp;<wbr> 17 f84f74bc 8945fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-4],eax<br>&nbsp;<wbr>&nbsp;<wbr> 18 f84f74bf 8b45fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-4]<br>&nbsp;<wbr>&nbsp;<wbr> 21 f84f74c2 8be5&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,ebp<br>&nbsp;<wbr>&nbsp;<wbr> 21 f84f74c4 5d&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 21 f84f74c5 c20800&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ret&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 8<br>kd&gt; uf bz4!myadd3<br>bz4!MyAdd3 [d:\mydriver\bz4\bz4.c @ 24]:<br>&nbsp;<wbr>&nbsp;<wbr> 24 f84f74d0 8bff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edi,edi<br>&nbsp;<wbr>&nbsp;<wbr> 24 f84f74d2 55&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 24 f84f74d3 8bec&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp<br>&nbsp;<wbr>&nbsp;<wbr> 24 f84f74d5 83ec10&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> sub&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,10h<br>&nbsp;<wbr>&nbsp;<wbr> 26 f84f74d8 8b4508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 26 f84f74db 03450c&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+0Ch]<br>&nbsp;<wbr>&nbsp;<wbr> 26 f84f74de 8945f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-8],eax<br>&nbsp;<wbr>&nbsp;<wbr> 27 f84f74e1 8b4df8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp-8]<br>&nbsp;<wbr>&nbsp;<wbr> 27 f84f74e4 034d08&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 27 f84f74e7 894dfc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-4],ecx<br>&nbsp;<wbr>&nbsp;<wbr> 28 f84f74ea 8b5508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 28 f84f74ed 8955f0&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-10h],edx<br>&nbsp;<wbr>&nbsp;<wbr> 29 f84f74f0 8b4508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 29 f84f74f3 0345f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-8]<br>&nbsp;<wbr>&nbsp;<wbr> 29 f84f74f6 8945f4&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-0Ch],eax<br>&nbsp;<wbr>&nbsp;<wbr> 30 f84f74f9 8b45f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-8]<br>&nbsp;<wbr>&nbsp;<wbr> 30 f84f74fc 0345fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-4]<br>&nbsp;<wbr>&nbsp;<wbr> 30 f84f74ff 0345f0&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-10h]<br>&nbsp;<wbr>&nbsp;<wbr> 30 f84f7502 0345f4&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-0Ch]<br>&nbsp;<wbr>&nbsp;<wbr> 33 f84f7505 8be5&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,ebp<br>&nbsp;<wbr>&nbsp;<wbr> 33 f84f7507 5d&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 33 f84f7508 c20800&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ret&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 8</p>
<p>///////////////////////////////////////////</p>
<p>//终于等到分析了<br>先看下全局变量 ：<br>ULONG au3 = 7;<br>ULONG au4 = 9;</p>
<p>看程序中Data存放的:</p>
<p>kd&gt; dd f84f7700<br>f84f7700&nbsp;<wbr> 00000007 00000009 f84de439 07b21bc6</p>
<p>没错，以后要查看全局变量的值，先反汇编，获得Data的偏移量，dd 地址 就可以看见了。</p>
<p>/////////////////////</p>
<p>kd&gt; uf bz4!myadd3<br>bz4!MyAdd3 [d:\mydriver\bz4\bz4.c @ 24]:<br>.......<br>&nbsp;<wbr>&nbsp;<wbr> 24 f84f74d5 83ec10&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> sub&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,10h<br>.......<br>&nbsp;<wbr>&nbsp;<wbr> 局部变量开辟空间。<br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr><br>&nbsp;<wbr>好了，简单赋值，调用就玩到这里，接下来是.....&nbsp;<wbr></p>
<p><br></p>
<img src ="http://www.cppblog.com/iniwf/aggbug/112924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iniwf/" target="_blank">iniwf</a> 2010-04-18 19:22 <a href="http://www.cppblog.com/iniwf/archive/2010/04/18/112924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内核反编译学习笔记2</title><link>http://www.cppblog.com/iniwf/archive/2010/04/18/112922.html</link><dc:creator>iniwf</dc:creator><author>iniwf</author><pubDate>Sun, 18 Apr 2010 11:02:00 GMT</pubDate><guid>http://www.cppblog.com/iniwf/archive/2010/04/18/112922.html</guid><wfw:comment>http://www.cppblog.com/iniwf/comments/112922.html</wfw:comment><comments>http://www.cppblog.com/iniwf/archive/2010/04/18/112922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/iniwf/comments/commentRss/112922.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iniwf/services/trackbacks/112922.html</trackback:ping><description><![CDATA[<p>内核反编译学习笔记2（上）</p>
<p>&nbsp;<wbr></p>
<p>本节任务：通过具有不同数量参数的函数调用，看其中区别<br>所用程序bz3<br>需要掌握：<br>windbg命令：<br>uf 反汇编<br>dd 查看内容</p>
<p>调用的时候：<br>mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 给参数赋值<br>push&nbsp;<wbr>&nbsp;<wbr> eax 供函数使用的参数<br>被调用函数内部<br>push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 保存ebp，用来保存调用前运行的代码地址<br>mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 将esp赋值给ebp，现在有新的ebp指针了,指向栈顶</p>
<p>pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 恢复ebp，取得地址，准备跳到那地址的代码，继续运行程序</p>
<p><br>需要了解<br>JMP&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 无条件跳转，去运行跳转后地址的代码<br>ret&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 返回，注意,调用前每push一个参数，esp就-4，两个参数就-8，ret的时候，需要+8返回</p>
<p>无需了解：<br>call=push+JMP<br>ret = pop+JMP&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 将在后面继续说明</p>
<p><br>//先贴代码，仔细看其实很简单</p>
<p><br>VOID MyP0()<br>{<br>&nbsp;<wbr>DbgPrint("no arg...\r\n");<br>}</p>
<p>VOID MyP1(ULONG u1)<br>{<br>&nbsp;<wbr>DbgPrint("One arg:%d\n!",u1);<br>}</p>
<p>VOID MyP2(ULONG u1,ULONG u2)<br>{<br>&nbsp;<wbr>&nbsp;<wbr> ULONG u3;<br>&nbsp;<wbr>&nbsp;<wbr> u3 = u1+u2;<br>&nbsp;<wbr>&nbsp;<wbr> DbgPrint("two arg:%d\n!",u3);</p>
<p>}<br>&nbsp;<wbr></p>
<p>VOID DriverUnload(PDRIVER_OBJECT driver)<br>{<br>&nbsp;<wbr><br>&nbsp;<wbr>DbgPrint("unload&#8230;\r\n");<br>}</p>
<p><br>NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)<br>{<br>&nbsp;<wbr>ULONG x1 = 5;<br>&nbsp;<wbr>ULONG x2 = 8;<br>&nbsp;<wbr><br>&nbsp;<wbr><br>&nbsp;<wbr><br>#if DBG<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> _asm int 3<br>#endif<br>&nbsp;<wbr><br>&nbsp;<wbr>MyP0();<br>&nbsp;<wbr>MyP1(x1);<br>&nbsp;<wbr>MyP2(x1,x2);<br>&nbsp;<wbr></p>
<p>&nbsp;<wbr><br>&nbsp;<wbr>driver-&gt;DriverUnload = DriverUnload;<br>&nbsp;<wbr>return STATUS_SUCCESS;<br>}</p>
<p>//////代码结束</p>
<p><br>以下分别为Entry主函数和3个自定义函数的反汇编。<br>汇编完了先放那，具体解析在下面。</p>
<p><br>kd&gt; uf bz3!driverentry<br>bz3!DriverEntry [d:\mydriver\bz3\bz3.c @ 31]:<br>&nbsp;<wbr>&nbsp;<wbr> 31 f8451520 8bff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edi,edi<br>&nbsp;<wbr>&nbsp;<wbr> 31 f8451522 55&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 31 f8451523 8bec&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp<br>&nbsp;<wbr>&nbsp;<wbr> 31 f8451525 83ec08&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> sub&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr>&nbsp;<wbr> 32 f8451528 c745f805000000&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-8],5<br>&nbsp;<wbr>&nbsp;<wbr> 33 f845152f c745fc08000000&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-4],8<br>&nbsp;<wbr>&nbsp;<wbr> 38 f8451536 cc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> int&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 3<br>&nbsp;<wbr>&nbsp;<wbr> 41 f8451537 e854ffffff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz3!MyP0 (f8451490)<br>&nbsp;<wbr>&nbsp;<wbr> 42 f845153c 8b45f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-8]<br>&nbsp;<wbr>&nbsp;<wbr> 42 f845153f 50&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax<br>&nbsp;<wbr>&nbsp;<wbr> 42 f8451540 e86bffffff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz3!MyP1 (f84514b0)<br>&nbsp;<wbr>&nbsp;<wbr> 43 f8451545 8b4dfc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp-4]<br>&nbsp;<wbr>&nbsp;<wbr> 43 f8451548 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx<br>&nbsp;<wbr>&nbsp;<wbr> 43 f8451549 8b55f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ebp-8]<br>&nbsp;<wbr>&nbsp;<wbr> 43 f845154c 52&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx<br>&nbsp;<wbr>&nbsp;<wbr> 43 f845154d e87effffff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz3!MyP2 (f84514d0)<br>&nbsp;<wbr>&nbsp;<wbr> 47 f8451552 8b4508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 47 f8451555 c74034001545f8&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [eax+34h],offset bz3!DriverUnload (f8451500)<br>&nbsp;<wbr>&nbsp;<wbr> 48 f845155c 33c0&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> xor&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,eax<br>&nbsp;<wbr>&nbsp;<wbr> 49 f845155e 8be5&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,ebp<br>&nbsp;<wbr>&nbsp;<wbr> 49 f8451560 5d&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 49 f8451561 c20800&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ret&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 8<br>&nbsp;<wbr>&nbsp;<wbr></p>
<p>内核反编译学习笔记2（下）</p>
<p>&nbsp;<wbr></p>
<p>三个自定义：<br>kd&gt; uf bz3!myp0<br>bz3!MyP0 [d:\mydriver\bz3\bz3.c @ 5]:<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 5 f8451490 8bff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edi,edi<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 5 f8451492 55&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 5 f8451493 8bec&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 6 f8451495 68701545f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz3! ?? ::FNODOBFM::`string' (f8451570)<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 6 f845149a e8cb000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz3!DbgPrint (f845156a)<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 6 f845149f 83c404&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,4<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 7 f84514a2 5d&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 7 f84514a3 c3&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ret<br>kd&gt; uf bz3!myp1<br>bz3!MyP1 [d:\mydriver\bz3\bz3.c @ 10]:<br>&nbsp;<wbr>&nbsp;<wbr> 10 f84514b0 8bff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edi,edi<br>&nbsp;<wbr>&nbsp;<wbr> 10 f84514b2 55&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 10 f84514b3 8bec&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp<br>&nbsp;<wbr>&nbsp;<wbr> 11 f84514b5 8b4508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 11 f84514b8 50&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax<br>&nbsp;<wbr>&nbsp;<wbr> 11 f84514b9 68801545f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz3! ?? ::FNODOBFM::`string' (f8451580)<br>&nbsp;<wbr>&nbsp;<wbr> 11 f84514be e8a7000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz3!DbgPrint (f845156a)<br>&nbsp;<wbr>&nbsp;<wbr> 11 f84514c3 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr>&nbsp;<wbr> 12 f84514c6 5d&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 12 f84514c7 c20400&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ret&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 4<br>kd&gt; uf bz3!myp2<br>bz3!MyP2 [d:\mydriver\bz3\bz3.c @ 15]:<br>&nbsp;<wbr>&nbsp;<wbr> 15 f84514d0 8bff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edi,edi<br>&nbsp;<wbr>&nbsp;<wbr> 15 f84514d2 55&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 15 f84514d3 8bec&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp<br>&nbsp;<wbr>&nbsp;<wbr> 15 f84514d5 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx<br>&nbsp;<wbr>&nbsp;<wbr> 17 f84514d6 8b4508&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]<br>&nbsp;<wbr>&nbsp;<wbr> 17 f84514d9 03450c&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+0Ch]<br>&nbsp;<wbr>&nbsp;<wbr> 17 f84514dc 8945fc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> dword ptr [ebp-4],eax<br>&nbsp;<wbr>&nbsp;<wbr> 18 f84514df 8b4dfc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp-4]<br>&nbsp;<wbr>&nbsp;<wbr> 18 f84514e2 51&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx<br>&nbsp;<wbr>&nbsp;<wbr> 18 f84514e3 68901545f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz3! ?? ::FNODOBFM::`string' (f8451590)<br>&nbsp;<wbr>&nbsp;<wbr> 18 f84514e8 e87d000000&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz3!DbgPrint (f845156a)<br>&nbsp;<wbr>&nbsp;<wbr> 18 f84514ed 83c408&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> add&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,8<br>&nbsp;<wbr>&nbsp;<wbr> 20 f84514f0 8be5&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> esp,ebp<br>&nbsp;<wbr>&nbsp;<wbr> 20 f84514f2 5d&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp<br>&nbsp;<wbr>&nbsp;<wbr> 20 f84514f3 c20800&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ret&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 8<br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> 正式开始我们的任务<br>&nbsp;<wbr>&nbsp;<wbr> ////////////<br>&nbsp;<wbr>&nbsp;<wbr> 以下为Entry中调用函数的反汇编代码<br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz3!MyP0 (f8451490)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ;无参数<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-8]&nbsp;<wbr>&nbsp;<wbr> ;1个参数<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz3!MyP1 (f84514b0)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx,dword ptr [ebp-4]&nbsp;<wbr>&nbsp;<wbr> ;2个参数<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ecx<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx,dword ptr [ebp-8]<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edx<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz3!MyP2 (f84514d0)&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></p>
<p>&nbsp;<wbr>&nbsp;<wbr> 显然我们可以得出结论：<br>&nbsp;<wbr>&nbsp;<wbr> 在调用函数的时候，无参数，直接call，<br>&nbsp;<wbr>&nbsp;<wbr> 有参数，有几个要push几个，把eax等寄存器内的数据入栈:push exx<br>&nbsp;<wbr>&nbsp;<wbr> eax,edx等寄存器内的数据哪里来的呢？通过mov，从存放地点移动过来赋值。<br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr> //接下来我们进入函数内部，要动态追踪下面代码。以后每次看见这样代码，明白道理，就直接忽略：<br>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 保存ebp<br>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 保存esp</p>
<p>&nbsp;<wbr> pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 获得ebp<br>&nbsp;<wbr> ret&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 返回，注意，后面为什么是8<br>&nbsp;<wbr><br>&nbsp;<wbr> 我们先看一下Entry调用MyP0处的地址：<br>&nbsp;<wbr>&nbsp;<wbr> 38 f8451536 cc&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> int&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 3<br>&nbsp;<wbr>&nbsp;<wbr> 41 f8451537 e854ffffff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz3!MyP0 (f8451490)<br>&nbsp;<wbr>&nbsp;<wbr> 42 f845153c 8b45f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp-8]<br>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr>&nbsp;<wbr> 显然调用MyP0后，要运行f845153c的代码。然后我们到函数内部看<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 中ebp的内容，是不是f845153c<br>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><br>&nbsp;<wbr> 进入windbg:<br>//////////////////////////<br>&nbsp;<wbr> kd&gt; t<br>bz3!DriverEntry+0x17:<br>f8451537 e854ffffff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> call&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> bz3!MyP0 (f8451490)<br>kd&gt; t<br>bz3!MyP0:<br>f8451490 8bff&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> edi,edi<br>kd&gt; p<br>bz3!MyP0+0x5:<br>f8451495 68701545f8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> offset bz3! ?? ::FNODOBFM::`string' (f8451570)<br>kd&gt; dd ebp<br>f8282c6c&nbsp;<wbr> f8282c7c f845153c 00000005 00000008<br>//////////////////<br>呵呵，没错，f845153c,5,8,都是要用的。<br>下面两个地址也应该出现在下面两个函数的ebp中,不然程序返回后不知道继续运行哪里的代码。<br>&nbsp;<wbr>f8451545 f8451552<br>&nbsp;<wbr><br>&nbsp;<wbr>顺便看下类似下面命令是什么意思<br>&nbsp;<wbr>mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> eax,dword ptr [ebp+8]<br>&nbsp;<wbr><br>我们要知道 ebp+8，要先看下ebp:<br>&nbsp;<wbr><br>kd&gt; dd ebp<br>f8282c64：&nbsp;<wbr> f8282c7c f8451552 00000005 00000008</p>
<p>可以看到，ebp+4就是f8451552，返回后继续运行的地址，ebp+8当然是5了,ebp+12(哦，要16进制:ebp+c)是8。<br>那我们直接看下dd ebp+8：<br>kd&gt; dd ebp+8<br>f8282c6c:&nbsp;<wbr>&nbsp;<wbr> 00000005 00000008 00000005 00000008<br>kd&gt; dd ebp+c<br>f8282c70：&nbsp;<wbr> 00000008 00000005 00000008 f8282d4c</p>
<p>应该没疑问了。<br>&nbsp;<wbr><br>//////////////<br>以后看汇编代码的时候，可以忽略：<br>&nbsp;<wbr> push&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 保存返回地址<br>&nbsp;<wbr> mov&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp,esp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 设置新的ebp指针，指向栈顶<br>中间是具体实现<br>&nbsp;<wbr> pop&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> ebp&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 获得返回地址<br>&nbsp;<wbr> ret&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 8&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 返回</p>
<p>只看这些代码中间的代码就可以了，以后直接贴这些代码中间的实现。</p>
<img src ="http://www.cppblog.com/iniwf/aggbug/112922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iniwf/" target="_blank">iniwf</a> 2010-04-18 19:02 <a href="http://www.cppblog.com/iniwf/archive/2010/04/18/112922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内核驱动反编译笔记1</title><link>http://www.cppblog.com/iniwf/archive/2010/04/18/112921.html</link><dc:creator>iniwf</dc:creator><author>iniwf</author><pubDate>Sun, 18 Apr 2010 10:53:00 GMT</pubDate><guid>http://www.cppblog.com/iniwf/archive/2010/04/18/112921.html</guid><wfw:comment>http://www.cppblog.com/iniwf/comments/112921.html</wfw:comment><comments>http://www.cppblog.com/iniwf/archive/2010/04/18/112921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/iniwf/comments/commentRss/112921.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iniwf/services/trackbacks/112921.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://blog.sina.com.cn/s/blog_541329b40100eyrt.html内核驱动反编译笔记1&nbsp;所用程序:bz1,bz2内核驱动反编译后，看看是什么样子，函数调用，全局局部变量，各种循环，数组，数据结构，各种算法都什么样子。没什么捷径，一个个编写了反编译比对吧。比对么，先要有个最简单的程序来做标本，所以以下有一个最原始最简单的程序，和一个添加了自定...&nbsp;&nbsp;<a href='http://www.cppblog.com/iniwf/archive/2010/04/18/112921.html'>阅读全文</a><img src ="http://www.cppblog.com/iniwf/aggbug/112921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iniwf/" target="_blank">iniwf</a> 2010-04-18 18:53 <a href="http://www.cppblog.com/iniwf/archive/2010/04/18/112921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>