2011-06-11 93 views
2

比如這個linux系統調用int $0x80Windows上的Unix應用子系統如何在程序集中實現系統調用?如

SUA是否實施類似的東西? 如果是這樣,那麼命令是什麼?

這個特殊的代碼是一個我想改變對SUA

#cpuid.s Sample program to extract the processor Vendor ID 
.section .data 
output: 
    .ascii "The processor Vendor ID is 'xxxxxxxxxxxxx'\n" 
.section .text 
.globl _start 
_start: 
    movl $0, %eax 
    cpuid 
    movl $output, %edi 
    movl %ebx, 28(%edi) 
    movl %edx, 32(%edi) 
    movl %ecx, 36(%edi) 
    movl $4, %eax 
    movl $1, %ebx 
    movl $output, %ecx 
    movl $42, %edx 
    int $0x80 
    movl $1, %eax 
    movl $0, %ebx 
    int $0x80 

回答

1

使用它在Unix上運行Linux的子系統,而不是整個計算機。

int 0x80是一種在Linux上調用系統調用的方法。就POSIX而言,這是一個實現細節,POSIX實際上是Linux和SUA的共同之處。所以我會說,雖然Linux(x86上)確實支持0x80的系統調用,但我沒有看到爲什麼Windows上需要SUA。這是因爲SUA不是一個包含與Linux兼容的系統。如果你在Linux上構建一個程序,它可能會使用int 0x80,但如果你在SUA下構建它以達到進行系統調用的目的,你可能會發現它完全不同。

你想完成什麼?

+0

我想在組件上用屏幕打印一行。因爲我剛剛開始學習裝配。在linux上,我可以通過$ 0x80來實現,有沒有辦法在SUA上做類似的事情?或DOS程序集? – 2011-06-12 01:53:44

+0

你不是真的只用$ 0x80來做它,你也設置了一些系統調用參數,對吧?我想你需要弄清楚如何在Windows上裝配系統調用。你在Linux上使用哪種系統調用? – 2011-06-12 01:57:14

+0

很酷。爲您的ASM添加實質性評論也會有所幫助。另一個探索的想法是將其提升到一個水平,並談論你實際想要完成的事情。也許它可以在沒有ASM的情況下完成。 – 2011-06-12 02:14:07

0

爲了從用戶模式訪問內核服務,Windows確實有系統調用,類似於linux。通常情況下,您不直接使用syscallint指令,而是使用ntdll.dll中的一個包裝器。

linux系統調用和windows系統調用之間肯定沒有任何1:1的相關性。

各種子系統(Win32,例如kernel32.dll和user32.dll和POSIX,例如SUA庫)在需要進行系統調用時調用ntdll.dll函數。

相關問題