我用下面的代碼創建了一個簡單的C++源文件。彙編語言機器代碼
int main() {
int a = 1;
int b = 2;
if(a < b) {
return 1;
}
else if(a > b) {
return 2;
}
else {
return 3;
}
}
我用objdump的命令來獲取上述源代碼的彙編代碼。 併線
INT B = 2;轉換爲mov DWORD PTR [rbp-0x4],0x2。
而其相應的機器碼(十六進制格式)是c7 45 fc 02 00 00 00。
我想知道如何將彙編代碼轉換爲二進制代碼。我查閱了x86-64的英特爾參考手冊,但由於我是低級編程的新手,所以我無法理解。
「轉換」是什麼意思?使用程序?手動做? – Shiro
手動轉換它。 –
'int b = 2;'不是彙編語言。不同之處在於,C是編譯語言,所以'int b = 2;'這行可以用許多不同的方式實現(甚至可以被優化器徹底刪除),這取決於編譯器將決定什麼,如何生成機器碼結果由C語言標準定義。彙編語言的方式不同,彙編程序不是這種類型的編譯器,當你在Assembly'add rax,rbx'中編寫時,它將被編譯爲這樣,不會改變指令,或者被某種優化器刪除,所以這更像是「1:1變革」。 – Ped7g