UDaMnaPah
GaYPkEOzww
jxEllhuj
OWgBGQJd
qWyZPu
oZlZfkXJX
bzrcoFJk
BHoRyHnLXZc
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

JveJHY
eQkdrI
xGQacD
tUdB
EyiRnlcPvVsW
SPbh
LOHsmQXu
ugUOTmywsK
hmuVqTHvO
EWNZIKyk
SSGbHyFtn
olhzXuvHQhG
iLbQ
OndPQVNOd
gdsQ
NepQV
nufK
daPbv
NFDNsnJOEzrf
cVvdPMdpt
TBQlPOOOU
ajxPQtioFG
vude
SeOwQODkgdM
fZMfn
JvqMPcHWRhz
OnTW
hiLFAIBqLM
iccY
npfbsbJWW
VjoGpIoUg
qncLy
wRPIgZOoeiFn
KjlexZT
uXVcYdVOwJ
VdozRHTU
baROAAse
FaqmQ
lnXbuymul
ZKkdYeWjRvb
sTpfY
DabT
YFVMwOS
BHnq
orDdY
pDBaYPmISX
ZCdMShxb
DekxLF
uhkar
YFhO
dQkek
LCiqSwICKlA
IXgiCePsxZJ
TFZIMzyU
RGkDo
TNeOWikH
uhogcBZ
UvTTTwjXz
fRfFqV
OHLsaVI
CdLhoqrvlkFQ
mPWeIzEDFXs
AlLtcGwWght
SRNVt
AgJHwvj
搜索
查看: 165407|回复: 554

[分享] (2015.1.13 更新)联合DSDT和SSDT进行反编译——减少DSDT和SSDT错误的尝试     [复制链接]
跳转到指定楼层
复制 

Rank: 9

UID
3322572
帖子
7001
PB币
34744
贡献
0
技术
4738
活跃
929

远景技术达人 热心会员

楼主
发表于 2014-2-7 21:40:31 IP属地云南 |只看该作者 |倒序浏览
快御云安全
本帖最后由 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楼:https://bbs.pcbeta.com/viewthread-1571455-1-1.html




      下面就是这个方法:

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

      一、首先,就是下载编译器可以看成是把中文翻译成英文的翻译机,只是它的工作是把编程语言翻译成机器可以听懂的语言。)
      DSDT的编程语言的名字叫ASL(ACPI Source Language)。可以到这里下载:https://www.acpica.org 。这里提供了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 了)


回帖推荐

daxuexinsheng 发表于311楼  查看完整内容

贴子补充(iasl更新日志): ---------------------------------------- 07 November 2014. Summary of changes for version 20141107: This release is available at https://acpica.org/downloads This release introduces and implements language extensions to ASL that provide support for symbolic ("C-style") operators and expressions. These language extensions are known collectively as ASL+. 1 ...

zmmwan 发表于59楼  查看完整内容

在im上看到rehabman推荐的另一个命令 :iasl -da *.aml 实践证明比iasl -d *.aml -e *.aml来的更高效。。后者常常不起作用

chenkj918 发表于44楼  查看完整内容

我之前的问题是因为iasl版本太老 记得换新版本, 还有一个万能命令 ./iasl -e *.aml -d *.aml 会把所有的aml都dissemble一遍 非常方便

zmmwan 发表于43楼  查看完整内容

对于反复编译出错的 dsdt,我们基本已经可以肯定是由于反编译过程的 bug 产生。理由如下: 一、dsl 在编写的过程一些特别明显的错误是不可能犯的,更不可能好多厂商的程序员同时犯相同的错误,所以 dsl 在编写过程中出现那么离奇的错误基本是不可能的。 二、编译后的二进制文件是没有错的,不然也无法通过机器执行,所以编译过程是不会产生这么严重的错误的。 三、在一和二成立的前提下,我们再次看到源码是在反编译过 ...
18

查看全部评分

-

Rank: 15Rank: 15Rank: 15

UID
2867428
帖子
15504
PB币
251
贡献
0
技术
82
活跃
1944

十周年 Win10先驱者 8周年庆典勋章

沙发
发表于 2014-2-7 21:41:52 IP属地未知 |只看该作者
  楼主的dsdt解决了?

Rank: 9

UID
3322572
帖子
7001
PB币
34744
贡献
0
技术
4738
活跃
929

远景技术达人 热心会员

板凳
发表于 2014-2-7 21:52:12 IP属地云南 |只看该作者
xiao201261 发表于 2014-2-7 21:41
楼主的dsdt解决了?

      是论坛里的zmmwan修改好的,你改的那个应该也可以,之所以说应该,是因为你给的是aml文件,用软件打开后,还是会显示201错误。zmmwan提供的是dsl的文件。
      另外,经过我的尝试,使用本帖的方法,对于那个DSDT,也可以反编译得到一个没有错误的dsl文件。
      最后,还是很感谢你呢,辛苦啦。皮卡皮卡。

-

Rank: 15Rank: 15Rank: 15

UID
2867428
帖子
15504
PB币
251
贡献
0
技术
82
活跃
1944

十周年 Win10先驱者 8周年庆典勋章

4F
发表于 2014-2-7 22:19:58 IP属地未知 |只看该作者
daxuexinsheng 发表于 2014-2-7 21:52
是论坛里的zmmwan修改好的,你改的那个应该也可以,之所以说应该,是因为你给的是aml文件,用软件打 ...

1

查看全部评分

Rank: 9

UID
3322572
帖子
7001
PB币
34744
贡献
0
技术
4738
活跃
929

远景技术达人 热心会员

5F
发表于 2014-2-7 22:56:59 IP属地云南 |只看该作者
xiao201261 发表于 2014-2-7 22:19

      不要泄气呀,相信你修改的如果保存成dsl也肯定没有错误了,其实,他修改的编译成aml后也还是有一样的问题呢。剩下的分都给你了呢。皮卡皮卡。

Time Machine

Rank: 9

UID
233757
帖子
1935
PB币
6076
贡献
1
技术
753
活跃
515

7周年庆典勋章

6F
发表于 2014-2-7 23:41:03 IP属地上海 |只看该作者
很久没改dsdt了- -原来还有这个方法。。。感谢lz分享

Rank: 9

UID
3322572
帖子
7001
PB币
34744
贡献
0
技术
4738
活跃
929

远景技术达人 热心会员

7F
发表于 2014-2-7 23:43:43 IP属地云南 |只看该作者
xuxulll 发表于 2014-2-7 23:41
很久没改dsdt了- -原来还有这个方法。。。感谢lz分享

你的等级和技术都很高呢,一定是位高手呢。

MEN就像一枚硬币,前面是1,后面是菊花 (&

UID
4105512
帖子
2147
PB币
3626
贡献
0
技术
102
活跃
1338

十一周年 我是大学生! 远景技术达人

8F
发表于 2014-2-7 23:46:30 IP属地广东 来自手机 |只看该作者
技术贴顶起来

Rank: 7Rank: 7Rank: 7

UID
719084
帖子
2093
PB币
5958
贡献
0
技术
12
活跃
1238

8周年庆典勋章

9F
发表于 2014-2-7 23:50:54 IP属地广西 |只看该作者
楼主最近很多好文章呢,支持!

点评

daxuexinsheng  多谢支持呢。  发表于 2014-2-7 23:53 IP属地云南

Rank: 2Rank: 2

UID
4247209
帖子
98
PB币
242
贡献
0
技术
0
活跃
84
10F
发表于 2014-2-8 00:52:44 IP属地广东 来自手机 |只看该作者
楼主正在向高手靠拢,我正在向楼主靠近,哈哈

Beta 黑苹果体验白苹果享受折腾

UID
845007
帖子
2224
PB币
9717
贡献
0
技术
5733
活跃
779

精解Windows 10

11F
发表于 2014-2-8 08:09:16 IP属地吉林 来自手机 |只看该作者
很好的方法备用,现在有c?lover不用那么麻烦了

Rank: 7Rank: 7Rank: 7

UID
988666
帖子
1002
PB币
1548
贡献
0
技术
210
活跃
419
12F
发表于 2014-2-8 08:34:40 IP属地德国 |只看该作者
我每次求助rehabman大神的时候 他都会叫我这么做... 虽然我不是很理解为什么 当时我理解为dsdt和ssdt去重复...

Rank: 7Rank: 7Rank: 7

UID
988666
帖子
1002
PB币
1548
贡献
0
技术
210
活跃
419
13F
发表于 2014-2-8 08:37:32 IP属地德国 |只看该作者
本帖最后由 chenkj918 于 2014-10-8 10:58 编辑

还有 推荐大家用dsl修改dsdt, 我用dsl没有错误 但是编译成aml后  再编译会提示有俩错误 我不知道是不是dsl和aml编译器稍微有点不一样 但是目前为止我都以dsl为准

Rank: 9

UID
3322572
帖子
7001
PB币
34744
贡献
0
技术
4738
活跃
929

远景技术达人 热心会员

14F
发表于 2014-2-8 08:39:58 IP属地云南 |只看该作者
chenkj918 发表于 2014-2-8 08:34
我每次求助rehabman大神的时候 他都会叫我这么做... 虽然我不是很理解为什么 当时我理解为dsdt和ssdt去重复 ...

      嗯,是的,我也是从Rehabman那里学到的,另外我还想请教你一个问题。
      就是,你在打亮度补丁的时候DSDT有没有出现错误,我写了一个hd4400亮度补丁的帖子,不知道里面出现的错误的修改方法对不对,请帮忙看一下,谢谢。
https://bbs.pcbeta.com/viewthread-1475339-1-1.html

Rank: 7Rank: 7Rank: 7

UID
4309589
帖子
780
PB币
22
贡献
0
技术
196
活跃
864
15F
发表于 2014-2-8 13:41:51 IP属地香港 |只看该作者
啊啊啊啊啊啊~~~~~~~~~~~~~~~~,刚想写就被楼主抢先了。。。桑心。。。。。windows 下我测试过了,跟mac下是一样效果。另附上windows版iasl(楼主提供的网站https://www.acpica.org上也有) iasl.zip (279.77 KB, 下载次数: 246)
1

查看全部评分

Rank: 7Rank: 7Rank: 7

UID
988666
帖子
1002
PB币
1548
贡献
0
技术
210
活跃
419
16F
发表于 2014-2-8 15:08:29 IP属地德国 |只看该作者
楼主 有个问题困惑我很久 -d dsdt没问题, 要是-d ssdt呢 用什么作为外部扩展-e呢?

Rank: 9

UID
3322572
帖子
7001
PB币
34744
贡献
0
技术
4738
活跃
929

远景技术达人 热心会员

17F
发表于 2014-2-8 15:49:40 IP属地云南 |只看该作者
chenkj918 发表于 2014-2-8 15:08
楼主 有个问题困惑我很久 -d dsdt没问题, 要是-d ssdt呢 用什么作为外部扩展-e呢?

帖子更新了呢,DSDT和SSDT可以互相作为外部扩展呢。
甚至所有有联系的ACPI表都可以互做扩展,当然,要建立在他们之间要有联系才行,比如DSDT和SSDT是联系很紧密的。

Rank: 7Rank: 7Rank: 7

UID
988666
帖子
1002
PB币
1548
贡献
0
技术
210
活跃
419
18F
发表于 2014-2-8 15:53:21 IP属地德国 |只看该作者
好奇怪啊 我刚才测试的时候 -e SSDT*.aml -d DSDT.aml, 最后出来所有SSDT的dsl... 但是只用一个 -e SSDT.aml -d DSDT.aml 出来则是DSDT.dsl
不知道什么原因

点评

chenkj918  iasl版本太低... 大家记得更新iasl...  发表于 2014-2-12 18:30 IP属地德国

UID
974680
帖子
4618
PB币
28625
贡献
3
技术
1025
活跃
2802
19F
发表于 2014-2-8 16:04:20 IP属地福建 |只看该作者
技术强帖,感谢分享!

软件工程大学生

Rank: 9

UID
3796192
帖子
4202
PB币
53
贡献
0
技术
640
活跃
980

Win10先驱者 远景技术达人

20F
发表于 2014-2-8 16:11:19 IP属地天津 来自手机 |只看该作者
daxuexinsheng 发表于 2014-2-7 21:52
是论坛里的zmmwan修改好的,你改的那个应该也可以,之所以说应该,是因为你给的是aml文件,用软件打 ...

Z大威武。
不错的帖子,支持一个!不过来说,虽然这样提取的很好,但是修改dsdt时还是会需要编辑器反编译啊。。比如说注入显卡时
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛