2012-01-08 145 views
2

我目前正在嘗試學習我的Trisquel發行版(我猜是在引擎蓋下使用Ubuntu?)上的程序集。出於某種原因,我被困在創建和執行程序集片段的第一步。bash,無法執行二進制文件

.section data 

.section text 
.globl _start 
_start: 
movl $1, %eax # syscall for exiting a program 
movl $0, %ebx # status code to be returned 
int $0x80 

當我嘗試彙編和鏈接它創建一個可執行文件並運行可執行文件,我得到的是這樣的:

> as myexit.s -o myexit.o && ld myexit.o -o myexit 
> ./myexit 
bash: ./myexit: cannot execute binary file 

我不知道究竟是怎麼回事。在四處搜索後,似乎通常會在嘗試在64位操作系統上執行32位可執行文件時彈出此錯誤,反之亦然,但這種情況並非如此。

這裏是file輸出和uname命令:

$ file myexit 
myexit: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped 
$ uname -a 
Linux user 2.6.35-28-generiC#50trisquel2-Ubuntu SMP Tue May 3 00:54:52 UTC 2011 i686 GNU/Linux 

有人可以幫助我瞭解究竟是怎麼回事錯在這裏?謝謝。

+1

可執行位在那裏,對嗎? – 2012-01-08 19:17:48

+0

@Uku:是的,否則它通常會給予'拒絕的權限'錯誤 – sasuke 2012-01-08 19:23:39

+0

我自己這麼想,但只是檢查。 – 2012-01-08 19:25:13

回答

4
.section text 

不正確,這將創建一個名爲text當你需要你的代碼是在.text節段。將其替換爲:

.data 

.text 
.globl _start 
_start: 
    ... 
+0

哇,非常感謝!用'.text'替換'.data'和'text'後的代碼就像魅力一樣。 – sasuke 2012-01-08 19:45:52

相關問題