官术网_书友最值得收藏!

1.1.1 反編譯何時(shí)有用

對(duì)于許多編程語(yǔ)言來說,完全反編譯是不可能的。這些語(yǔ)言將代碼直接構(gòu)建成機(jī)器碼,在這個(gè)過程中會(huì)丟失一些信息,比如變量名。雖然一些高級(jí)反編譯器能夠?yàn)檫@些語(yǔ)言構(gòu)建偽代碼,但是這個(gè)過程并不完美。

然而,一些編程語(yǔ)言會(huì)使用所謂的即時(shí)(Just-In-Time,JIT)編譯技術(shù)。當(dāng)使用JIT語(yǔ)言編寫的程序被“構(gòu)建”時(shí),它們會(huì)被從源代碼轉(zhuǎn)化為一種中間語(yǔ)言(Intermediate Language,IL)而非機(jī)器碼。JIT編譯器在程序運(yùn)行之前會(huì)將一份代碼以這種中間語(yǔ)言形式存儲(chǔ)起來,等到程序開始運(yùn)行的時(shí)候,再將代碼轉(zhuǎn)換為機(jī)器碼。使用JIT編譯技術(shù)的語(yǔ)言包括Java、Dalvik(Android)以及.NET。

例如,Java因在很大程度上不受平臺(tái)限制而聞名。背后的原因是它使用了中間語(yǔ)言Java字節(jié)碼(Java bytecode)和Java虛擬機(jī)(Java Virtual Machine, JVM)。通過將程序代碼分發(fā)為字節(jié)碼并在運(yùn)行時(shí)對(duì)其進(jìn)行編譯,JVM將Java中間語(yǔ)言轉(zhuǎn)換為特定于運(yùn)行它的機(jī)器的機(jī)器碼。雖然這種方式可能會(huì)對(duì)文件大小和性能產(chǎn)生負(fù)面影響,但在可移植性上有所收獲。

JIT編譯還大大簡(jiǎn)化了這些應(yīng)用程序的逆向工程。這些中間語(yǔ)言與原始源代碼非常相似,可以被反編譯或轉(zhuǎn)換回源代碼。源代碼的設(shè)計(jì)初衷就是為了方便人們閱讀,這使得理解應(yīng)用程序的邏輯、識(shí)別軟件保護(hù)措施或其他嵌入的秘密變得容易得多。

主站蜘蛛池模板: 盐城市| 四川省| 西充县| 禹州市| 大竹县| 湄潭县| 犍为县| 清丰县| 大丰市| 桐庐县| 赣州市| 玛沁县| 望都县| 广宗县| 武宁县| 从江县| 尼玛县| 乐至县| 聂拉木县| 潮安县| 阳西县| 济南市| 秦皇岛市| 于都县| 龙井市| 穆棱市| 长宁区| 洪洞县| 蒲城县| 渭南市| 南平市| 长寿区| 维西| 临安市| 全南县| 贵港市| 元氏县| 纳雍县| 临泽县| 大连市| 天等县|