分享

(2015.1.13 更新)联合DSDT和SSDT进行反编译——减少DSDT和SSDT错误的尝试

 Photoshop321 2016-07-04
本帖最后由 daxuexinsheng 于 2015-1-13 14:23 编辑

2015.1.13 更新
      把命令换成了最精简的形式。

      很多同学看到标题可能会感到困惑,什么是关于减少DSDT和SSDT错误的尝试呢?
      是这样的,一般,我们在Window下或者在Mac下提取到的DSDT都是从BIOS里直接读取的、已经编译好的字节码文件,可以理解为,我们只能提取到aml文件,这样,问题就随之产生了,即aml是编译好的文件,我们不能直接查看其中的内容,我们使用软件打开aml文件,其实是在做一个反编译的操作,把字节码文件反编译回到源代码,展现在软件里。而反编译的操作常常会很难避免地产生许多错误。就像是中文和英文之间不能进行无缝转换一样。

      我最近有一些机会,帮助景友修复DSDT,就在这个过程中,我找到了一种能使反编译产生的错误尽可能减少的方法,这是从国外的黑苹果高手Rehabman那里学到的。(当然我肯定不是论坛里第一个知道这个方法的只是好像还没有帖子介绍这个方法这才发贴如果已经有了相关的帖子还请版主删贴。)

      本方法需要使用原始的DSDT.aml和SSDT.aml(一般会有很多个)。




    (建议用Linux提取,方法见这个贴子的3楼:http://bbs./viewthread-1571455-1-1.html




      下面就是这个方法:

      其实就是使用命令联合DSDTSSDT进行反编译(即aml->dsl),使用命令,就有一些可选的操作了。

      一、首先,就是下载编译器可以看成是把中文翻译成英文的翻译机,只是它的工作是把编程语言翻译成机器可以听懂的语言。)
      DSDT的编程语言的名字叫ASL(ACPI Source Language)。可以到这里下载:https://www. 。这里提供了Unix、Windows、Linux版本的编译器,其中Windows提供了可直接运行的编译器,Unix还需要下载下来自己构建,但我的机器上构建不成功,就搜索了网友构建好的了,帖子会提供下载

      二、下载好编译器后,我们需要把它放到系统盘下的usr/local/bin目录,这样才能使用。
      这个目录是隐藏的你可以在顶部Finder的菜单栏选择前往菜单下最下面的前往文件夹”,在弹出的对话框中输入 /usr/local/bin 或者 /usr/bin就可以打开这个目录了把编译器程序放到里面就行了

      三、接下来,介绍要用到的命令
      1、cd :这是很多操作系统都支持的命令,其含义是“change directory”,就是改变路径。
    使用方法: cd 路径名比如 cd Desktop/ACPI ,就是定位到桌面上的ACPI文件夹。

      2、iasl :这是编译命令 使用: iasl 文件名 比如 iasl DSDT.dsl,就是编译DSDT.dsl文件。
        2.1 参数1: -e ,这里的e是external的首字母意思是在操作时要包括外部的一些信息,比如把SSDT的信息,加入到DSDT的反编译过程里,对于DSDT,SSDT就是外部信息。
        2.2 参数2:  -d这里的d是disassemble的首字母,字面意思是拆卸,可以说是反编译。

      四、最后是正题,我们要用到的命令的例子

     1、 打开Launchpad找到其它”->“终端”,输入以下命令
     2、cd Desktop/ACPI    指定到存放DSDT.aml、SSDT.aml文件的目录。
(你的文件路径不一定一定要是这个。)
     3、iasl –e SSDT*.aml –d DSDT.aml
已经有比这个命令效果更好的命令了具体请看贴子的最后。)

      这句命令的操作使用SSDT.aml里的相关信息协助反编译DSDT.amlSSDT后面的星号表示的是任意字符,比如,你的文件夹里有SSDT1.aml、SSDT2.aml、SSDT3.aml、SSDT4.aml ……。很多的SSDT,这样写,程序就会自动找这个文件夹下的所有SSDT,而不需要把所有SSDT的文件名写到命令里。

      执行这句命令后一般,就会在这个文件夹下生成一个dsl文件它的错误大大减少了甚至已经没有错误了。以后要修改DSDT,就可以用这个文件修改了,修改好就可以编译成aml使用了。(不建议用软件打开aml文件,编译好后,可以直接测试有没有效果了。)


          3.1 这句命令还可以反过来用,即
      iasl -e DSDT.aml -d SSDT*.aml 已经有比这个命令效果更好的命令了具体请看贴子的最后。)
      与前一句命令相比,操作反了过来这句命令是使用DSDT.aml里的相关信息协助反编译SSDT.aml,这样生成的SSDT.dsl,也能减少很多错误,甚至已经都没有错误了。
      以下是我使用这个方法的情况。

      以上是在OS X的终端进行的操作Windows下需要把编译器和
DSDT.amlSSDT.aml放在同一个文件夹再用cd命令到文件夹就可以执行命令了

      另外,在OS X下楼主推荐使用MaciASL编辑修改DSDT。楼主使用的是MaciASL的Rehabman的修改版。会提供下载。

      结束语本贴介绍的方法是一种尝试并不适合所有的电脑的DSDT如果你发现这种方法对你的DSDT没有减少错误的效果那就还是按照一般的方法修改DSDT吧

      声明在尝试此方法的过程中发生的一切后果由读者自行承担读者有选择是否使用此方法的自由

毕竟楼主不是什么高手不能保证会不会有什么问题

      文件下载地址:(iasl是编译器是ACPI 5.0的编译器DSDT Editor等软件用的是ACPI 4.0的编译器MaciASL是编辑DSDT的软件在软件的设置里可以选择编译器的版本。)(楼主在下载地址也更新了Windows版的编译器。ACPI 5.0 编译器 版本 更新到 20141107本。

特别注意
      新版本编译器,反编译后,用MaciASL打开,左边的树状目录会显示不全(实际的代码没有少,但树状目录不能显示完整)。
      已经更新为 国外大神 Rehabman 的修改版。
      http://pan.baidu.com/s/1pJ7DKGb

在帖子的第三页的43F、44F、59F有精彩回复大家可以看一下
1、贴子发出后的 第一个进展:iasl -e *.aml -d *.aml
(感谢 chenkj918 ,这是本贴的第一个进展。)
2、第二个进展: iasl -da *.aml
(感谢 zmman 告诉楼主他的新发现。这是目前减少错误最有效的命令之一。)

3、20140926版本及以前版本: iasl -da *.aml

4、20141107 版开始: iasl -da -dl *.aml
(从这个版本开始,iasl编译器开始支持 算数运算符 和 逻辑运算符,同时,增加了 -dl 命令 以使新编译器得到的代码和旧编译器兼容)

重要补充在之前的贴子,楼主忘了介绍 使用命令 编译DSDT/SSDT文件的方法了(即 dsl -> aml ),特此补充:
           iasl 文件名
示例: iasl DSDT.dsl 或者
           iasl SSDT*.dsl 或者
           iasl *.dsl
即可由 dsl源文件,生成 aml目标文件。(不建议用软件打开aml文件


或者在用 MaciASL 保存的时候这样选择:(保存类型选择:“ACPI Machine Language Binary”(简称aml),这样就可以把 dsl 编译保存为 aml 了)


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多