2010-08-04 84 views
1

什麼是OpenSolaris系統調用調用約定(x86)?什麼是OpenSolaris系統調用調用約定(x86)?

F.e.我想寫一個32位程序集的程序,它向控制檯顯示一個字符串。爲此,我想使用「寫入」系統調用(第4號)。對於用C寫的定義是:

ssize_t write(int fildes, const void *buf, size_t nbyte) 

什麼登記應持有菲爾德斯BUFnbyte參數呢?我應該打電話給哪個中斷?

回答

2

您可以編寫一個調用write的C程序,將其編譯爲彙編語言(使用-S選項)。然後檢查輸出以查看編譯器是如何執行的。

編輯:

的OpenSolaris的libc做這樣的:

首先,當你調用寫檢查了一些東西,然後調用__write:

pushl 0x10(%ebp) 
pushl 0xc(%ebp) 
pushl 0x8(%ebp) 
call c2730 <__write> 

和__write然後是這樣的:

<__write>: 
call c2735 <__write+0x5> 
pop %edx 
mov $0x4,%eax 
mov %esp,%ecx 
add $0x10,%edx 
sysenter 
jae c2751 <__write+0x21> 
cmp $0x5b,%eax 
je  c2730 <__write> 
jmp 2e0d0 <__cerror> 
ret 

它將寫入系統調用號碼放入eax(4)中,將堆棧指針放入ecx中,並將返回地址放入edx中。寫入系統調用的參數已經被壓入堆棧。

+0

編譯器從libc調用'write'函數。當我使用'syscall'函數調用一個系統調用時它也是如此 - 它從libc調用'syscall'函數。 我會分析libc的這些功能的實現,當我有一些空閒時間,但那段時間還沒有到來:) – antonone 2010-08-04 07:49:27

+0

大聲笑,我有答案。這裏是 - http://bit.ly/baMJVo :) – antonone 2010-08-04 11:10:52

相關問題