簡體   English   中英

如何編譯Java或C ++應用程序生成的代碼

[英]How to compile code generated by a Java or C++ App

我一直在學習編譯器理論和匯編,並設法創建了一個生成x86匯編代碼的編譯器。

如何獲取此匯編代碼並將其轉換為.exe? 我需要與之交互的一些神奇的API或工具嗎? 還是比我想象的簡單?

我不太確定.exe中有什么,也不知道匯編代碼和.exe本身之間有多少抽象。

我的“編譯器”是用Java編寫的,但我也想知道如何使用C ++來實現。

請注意,如果使用生成的程序集,則可以將其編譯為.exe,例如使用vc ++即可。


編輯:更精確地說,我已經知道如何使用編譯器來編譯匯編代碼。 我想要的是讓我的程序基本上輸出一個.exe。

看來您需要產生一個匯編程序進程和一個鏈接程序進程。 在UNIX上,就像調用fork()函數(這將創建一個新進程)和exec()函數一樣簡單,將匯編器和鏈接器可執行文件的名稱指定為函數的參數,並為這些可執行文件提供適當的參數,是生成的程序集和目標文件的名稱。 這就是您在UNIX系統上要做的所有事情。

通常,您使用匯編器和鏈接器來創建exe文件。 沒有魔術。 組裝了不同的部分,添加了標題和其他樣板,以便操作系統知道引導代碼位於程序的哪個位置並組織內存。

VC ++編譯器在后台執行此操作。 您可能會考慮在Linux上玩一些,因為您可以更好地了解Unix平台上的機制。 基本上是一樣的,但是很難在Windows上瀏覽UI。

原則上,每條組裝線都對應一條機器指令,該指令僅占exe文件中的幾個字節。 您可以在處理器規格中找到它們。 因此,如果您知道代碼和exe格式(標題,重定位信息等),則可以編寫自己的asembeler。

匯編程序如何將x86指令助記符映射到二進制機器指令?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM