可以!

所用的工具为IDA 4.15就可以了。

方法如下:

下面是我自己写的driver的反编译经过适当优化,能得到c语言的源代码。

driver入口:(DriverEntry)

.text:00010A1C                 public _DriverEntry@8

.text:00010A1C _DriverEntry@8  proc near

.text:00010A1C

.text:00010A1C arg_0           = dword ptr  4

.text:00010A1C

.text:00010A1C                 mov     eax, [esp+arg_0]

.text:00010A20                 mov     ecx, [eax+18h]

.text:00010A23                 mov     dword ptr [ecx+4], offset _Avalanch_AddDevice@8

.text:00010A2A                 mov     dword ptr [eax+30h], offset _Avalanch_StartIo@8

.text:00010A31                 mov     dword ptr [eax+38h], offset _Avalanch_CreateDispatch@8

.text:00010A38                 mov     dword ptr [eax+40h], offset _Avalanch_CloseDispatch@8

.text:00010A3F                 mov     dword ptr [eax+44h], offset _Avalanch_Read@8

.text:00010A46                 mov     dword ptr [eax+48h], offset _Avalanch_Write@8

.text:00010A4D                 mov     dword ptr [eax+80h], offset _Avalanch_CleanupDispatch@8

.text:00010A57                 mov     dword ptr [eax+90h], offset _Avalanch_PowerDispatch@8

.text:00010A61                 mov     dword ptr [eax+94h], offset _Avalanch_SystemControlDispatch@8

.text:00010A6B                 mov     dword ptr [eax+0A4h], offset _Avalanch_PnpDispatch@8

.text:00010A75                 xor     eax, eax

.text:00010A77                 retn    8

由于程序带有调试信息,所以反汇编的结果比不带调试信息的好读!

你的汇编语言水平高的话能得到如下近似的c代码:

NTSTATUS

DriverEntry(

IN PDRIVER_OBJECT DriverObject,

IN PUNICODE_STRING pRegistryPath

)

{

DriverObject->DriverExtension->AddDevice = Avalanch_AddDevice;

DriverObject->DriverStartIo = Avalanch_StartIo;

DriverObject->MajorFunction[IRP_MJ_CREATE] = Avalanch_CreateDispatch;

DriverObject->MajorFunction[IRP_MJ_CLOSE] = Avalanch_CloseDispatch;

DriverObject->MajorFunction[IRP_MJ_READ] = Avalanch_Read;

DriverObject->MajorFunction[IRP_MJ_WRITE] = Avalanch_Write;

DriverObject->MajorFunction[IRP_MJ_CLEANUP] = Avalanch_CleanupDispatch;

DriverObject->MajorFunction[IRP_MJ_POWER] = Avalanch_PowerDispatch;

DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = Avalanch_SystemControlDispatch;

DriverObject->MajorFunction[IRP_MJ_PNP] = Avalanch_PnpDispatch;

return STATUS_SUCCESS;

}

继续反汇编如下代码:

用鼠标双击函数_Avalanch_Write@8进入_Avalanch_Write@8的函数体:

.text:000119C8                 public _Avalanch_Write@8

.text:000119C8 _Avalanch_Write@8 proc near             ; DATA XREF: _DriverEntry@8+2Ao

.text:000119C8

.text:000119C8 var_4           = dword ptr -4

.text:000119C8 arg_0           = dword ptr  8

.text:000119C8 arg_4           = dword ptr  0Ch

.text:000119C8

.text:000119C8                 push    ebp

.text:000119C9                 mov     ebp, esp

.text:000119CB                 push    ecx

.text:000119CC                 mov     eax, [ebp+arg_0]

.text:000119CF                 and     [ebp+var_4], 0

.text:000119D3                 push    ebx

.text:000119D4                 push    esi

.text:000119D5                 mov     ebx, [eax+28h]

.text:000119D8                 mov     esi, [ebp+arg_4]

.text:000119DB                 lea     eax, [ebp+var_4]

.text:000119DE                 push    edi

.text:000119DF                 mov     edi, [esi+60h]

.text:000119E2                 push    eax

.text:000119E3                 push    esi

.text:000119E4                 push    ebx

.text:000119E5                 call    _Avalanch_IrpPrologue@12

.text:000119EA                 test    al, al

.text:000119EC                 jz      short loc_11A16

.text:000119EE                 xor     eax, eax

.text:000119F0                 mov     [ebp+var_4], 0C0000002h

.text:000119F7                 mov     [esi+1Ch], eax

.text:000119FA                 cmp     byte ptr [edi], 4

.text:000119FD                 jnz     short loc_11A0B

.text:000119FF                 cmp     [edi+4], eax

.text:00011A02                 jnz     short loc_11A20

.text:00011A04                 mov     [ebp+var_4], 0C000000Dh

.text:00011A0B

.text:00011A0B loc_11A0B:                              ; CODE XREF: _Avalanch_Write@8+35j

.text:00011A0B                 push    eax

.text:00011A0C                 push    [ebp+var_4]

.text:00011A0F                 push    esi

.text:00011A10                 push    ebx

.text:00011A11                 call    _Avalanch_CompleteIrpRequest@16

.text:00011A16

.text:00011A16 loc_11A16:                              ; CODE XREF: _Avalanch_Write@8+24j

.text:00011A16                                         ; _Avalanch_Write@8+6Bj

.text:00011A16                 mov     eax, [ebp+var_4]

.text:00011A19                 pop     edi

.text:00011A1A                 pop     esi

.text:00011A1B                 pop     ebx

.text:00011A1C                 leave

.text:00011A1D                 retn    8

.text:00011A20 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

.text:00011A20

.text:00011A20 loc_11A20:                              ; CODE XREF: _Avalanch_Write@8+3Aj

.text:00011A20                 push    offset _Avalanch_IrpCancelRoutine@8

.text:00011A25                 push    esi

.text:00011A26                 push    ebx

.text:00011A27                 call    _Avalanch_QueueIrp@12

.text:00011A2C                 mov     [ebp+var_4], 103h

.text:00011A33                 jmp     short loc_11A16

.text:00011A33 _Avalanch_Write@8 endp

如果你的汇编语言过硬,你能知道[ebp+arg_0]为PDEVICE_OBJECT, [ebp+arg_4]为PIRP,那么,mov eax, [ebp+arg_0]就取得了PDEVICE_OBJECT,而mov     ebx, [eax+28h]就取得了DeviceObject->DeviceExtension;

而mov     esi, [ebp+arg_4]取得了PIRP,

而mov     edi, [esi+60h]就是IoGetCurrentIrpStackLocation(Irp);

_Avalanch_IrpPrologue@12压栈三个参数

................................

详细写下来太麻烦了!

在分析反汇编代码时,一定要参照ddk对应的头文件

反编译object文件c语言,能不能通过反编译程序看.sys文件的源代码!相关推荐

  1. 可视化反编译APK工具,查看部分JAVA代码与全部资源文件。

    ###前言 APK是安卓安装包,里面主要就是两大部分 资源文件,主要是图片与布局. dex文件,也就是各种代码转换成的Android可执行文件. 如果直接ZIP打开混淆打包过的APK的话,会出现dex ...

  2. c 包含其他文件_C语言:全局变量在多个c文件中公用的方法!

    用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后包含到两个不同的c文件中,希望这个全局变量能在两个文件中共用. 举例说明:项目文件夹project下有main. ...

  3. 创建文件 c语言,汇编语言CreateFile函数:创建新文件或者打开已有文件

    函数 CreateFile 可以创建一个新文件或者打开一个已有文件.如果调用成功,函数返回打开文件的句柄:否则,返回特殊常数 INVALID_HANDLE_VALUEO 原型如下: CreateFil ...

  4. cmd文件 c语言的段,对于TMS320F2812的CMD文件的理解

    1.COFF格式 要谈CMD文件,首先不可避免的要谈下COFF格式,COFF格式是通用目标文件格式(Common Object File Format)的缩写,它是一种流行的二进制可执行文件格式,在D ...

  5. c语言中常用函数头文件,c语言中常用的函数和头文件

    头文件ctype.h 函数列表 函数类别函数目的详细说明 字符测试为字符和数字的isalnum 是否为isalpha字符 是否控制字符iscntrl 是否为数字isdigit 是否能够显示文字(空格除 ...

  6. c语言饭卡管理系统链表文件,C语言《学生信息管理系统》链表+文件操作

    今天带来的是一个链表版本的<学生信息管理系统>,功能包括:添加.显示.查询.删除.保存.读取,等功能模块,链表是C语言的进阶内容,希望大家好好学习,这里的代码可能会有一些瑕疵,希望大家提供 ...

  7. windows删除文件c语言函数,c rename()函数是否删除文件?

    我正在用C编程语言练习编程,并正在尝试使用rename()函数.我使用以下代码: #include #include int main(void) { if(rename ("data&qu ...

  8. c语言程序无法打开文件,C语言fopen()总是提示无法正常打开文件

    问题: 在windows系统命令行中运行编写的程序时,总是提示无法正常打开文件. 程序如下: //reducto.c //reduce the original file by 2/3 #includ ...

  9. 将数据写入文件C语言fwrite,fwrite -- 将数据写入到文件中

    fwrite函数文档 函数概要: fwrite 函数用于将指定尺寸的数据写入到指定的文件中. 函数原型: #include ... size_t fwrite(const void *ptr, siz ...

  10. C语言如何编程实现删除指定文件,c语言删除指定目录下的所有文件

    复制内容到剪贴板 代码:#include #include #include #include #include #include //判断是否是".."目录和".&qu ...

最新文章

  1. ASP.NET页面借助IFrame提交表单数据所遇到的问题
  2. 磁盘备份工具dcfldd
  3. 分布式任务队列 Celery — 深入 Task
  4. Linux crontab 命令格式与详细例子
  5. C#完美实现透明窗体的绘制效果
  6. python面向对象有什么用_Python 中的面向对象没有意义
  7. 聊聊Interlocked.CompareExchange吧?
  8. 斐波那契实现阶乘js_功能与命令式编程。 Java 8中的斐波那契,素数和阶乘
  9. 我的播客开通的第一天
  10. java Socket实现简单在线聊天(二)
  11. JPA的单向一对多关联(oneToMany)实现示例(基于Spring Boot + JPA +MySQL,表自动维护)
  12. struts2 拦截器_Struts2 execAndWait拦截器示例,用于长时间运行的动作
  13. 在ASP.Net中实现RSA加密
  14. 利用奇异值分解(SVD)进行彩色图片压缩
  15. 理论篇-地图学与GIS制图的基础理论(一)
  16. 基于STM32F429的AD9833-DDS程序
  17. H3C认证网络工程师
  18. 安卓linux开机画面,安卓开机画面_安卓开机动画修改_安卓开机动画修改器-Guide信息网...
  19. [微信小程序]--关于对文章浏览量的实现(inc)
  20. nexrcloud 自动上传_Nextcloud默认文件的自定义

热门文章

  1. Minix、UNIX、Linux的区别与联系
  2. linux 查看端口占用命令 亲测可用
  3. ASP.NET---母板应用
  4. C语言数字3转变字符 3 程序,C语言重点知识点
  5. pycharm输入不了代码_最易懂的Python新手教程:从基础语法到代码详解
  6. 5ecsgo正在发送客户端_MQTT X 桌面客户端使用指南
  7. 用python进行文本分析_用Python分析文本文件
  8. linux实现文本方式与图形方式的转换_Linux下的6款最好用的PDF文档阅览工具
  9. 数字和模拟通信系统 中文版_浏览器指纹欺骗工具-VMLogin中文版是怎么一个反指纹防关联浏览器...
  10. unity 太阳自发光_这些太阳能概念设计,灵感来自植物!