在64位系統(tǒng)中進(jìn)行32位匯編

在閱讀《Professional Assembly Language》(Richard Blum 著)第四章的示例程序時仲翎,其中有演示在匯編中使用C語言庫函數(shù)--printf,但我在測試這段代碼時遇到了一些問題铛漓。
首先說明我的系統(tǒng)環(huán)境溯香,運(yùn)行的是 Linux Mint 18.3 Cinnamon 64 bit。

兼容問題

代碼測試中所遇到的問題究其原因浓恶,是在64位系統(tǒng)中進(jìn)行了32位匯編玫坛,事實(shí)上就是不兼容的問題,為了避免這個問題包晰,讓匯32位編代碼的匯編(as)和連接(ld)按書中指導(dǎo)正常進(jìn)行湿镀,需要安裝一些包含32位函數(shù)庫的軟件包炕吸,在終端運(yùn)行:
sudo apt install lib32z1 lib32ncurses5 g++-multilib libc6-dev-i386

指定生成32-bit程序

首先打開匯編源碼文件cpuid2.s,在首行添加代碼 ".code32"

# cpuid2.s view the CPUID vendor id string using C library calls
.code32
.section .data
output:
    .asciz "the processor vendor id is '%s'\n"
.section .bss
    .lcomm buffer,12
.section .text
.globl _start
_start:
    movl $0,%eax
    cpuid
    movl $buffer,%edi
    movl %ebx,(%edi)
    movl %edx,4(%edi)
    movl %ecx,8(%edi)
    pushl $buffer
    pushl $output
    call printf
    addl $8,%esp
    pushl $0
    call exit

在終端運(yùn)行匯編器:
as --32 -o cpuid2.o cpuid2.s
生成32位目標(biāo)文件cpuid2.o
然后執(zhí)行連接操作:
ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o cpuid2 -lc cpuid2.o
生成linux下可執(zhí)行程序cpuid2勉痴,可以查看文件類型
file cpuid2
結(jié)果為:

cpuid2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, not stripped

至此赫模,代碼測試成功,程序可以正常運(yùn)行蒸矛。

編寫64-bit匯編代碼

# cpuid64.s using 64-bit assembly language
# view the CPUID   vendor id string using C library calls
.section .data
output:
    .asciz "the processor vendor id is '%s'\n"
.section .bss
    .lcomm buffer,12
.section .text
.globl _start
_start:
    movq $0, %rax
    cpuid
    movq $buffer, %rdi
    movq %rbx, (%rdi)
    movq %rdx, 4(%rdi)
    movq %rcx, 8(%rdi)
    movq $buffer, %rsi 
    movq $output, %rdi 
    movq $0, %rax
    call printf
    addq $8, %rsp
    pushq $0
    call exit
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嘴瓤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子莉钙,更是在濱河造成了極大的恐慌廓脆,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磁玉,死亡現(xiàn)場離奇詭異停忿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蚊伞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門席赂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人时迫,你說我怎么就攤上這事颅停。” “怎么了掠拳?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵癞揉,是天一觀的道長。 經(jīng)常有香客問我溺欧,道長喊熟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任姐刁,我火速辦了婚禮芥牌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘聂使。我一直安慰自己壁拉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布柏靶。 她就那樣靜靜地躺著弃理,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宿礁。 梳的紋絲不亂的頭發(fā)上案铺,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天蔬芥,我揣著相機(jī)與錄音梆靖,去河邊找鬼控汉。 笑死,一個胖子當(dāng)著我的面吹牛返吻,可吹牛的內(nèi)容都是我干的姑子。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼测僵,長吁一口氣:“原來是場噩夢啊……” “哼街佑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捍靠,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤沐旨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后榨婆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磁携,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年良风,在試婚紗的時候發(fā)現(xiàn)自己被綠了谊迄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡烟央,死狀恐怖统诺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疑俭,我是刑警寧澤粮呢,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站钞艇,受9級特大地震影響鬼贱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜香璃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一这难、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧葡秒,春花似錦姻乓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至学少,卻和暖如春剪个,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背版确。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工扣囊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乎折,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓侵歇,卻偏偏與公主長得像骂澄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惕虑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容