2012-10-04 71 views
0

我最近想出瞭如何在彙編中寫入標準輸出,但現在無法從標準輸入讀取並輸出讀回到標準輸出的內容。這是我到目前爲止的代碼:Windows程序集(x86)從Stdin讀取並輸出到Stdout

.386 
.model flat, stdcall 

WriteFile PROTO STDCALL:DWORD, :PTR, :DWORD, :PTR DWORD, :PTR OVERLAPPED 
ReadFile PROTO STDCALL:DWORD, :PTR, :DWORD, :PTR DWORD, :PTR OVERLAPPED 
GetStdHandle PROTO STDCALL:DWORD 
.data 


.data? 
input DW ? 
input_size DD ? 
read DD ? 

.code 
main: 
    INVOKE GetStdHandle, -10 
    INVOKE ReadFile, eax, OFFSET input, input_size, read, 0 
    INVOKE GetStdHandle, -11 
    INVOKE WriteFile, eax, OFFSET input, OFFSET input_size, read, 0 
    RET 
END main 

我很確定我看錯了。我很確定input_sizeread不像預期的那樣運行(如果我用number代替input_size,它會顯示一個空格number次),這對我的問題有影響(當我輸入我的輸入並返回時,它什麼也不顯示)。

我已經摸索了這個相當長的一段時間,並會感謝任何幫助。 (我這樣做只是爲了學習這不是作業)。

我的問題本質上是我做錯了什麼?

回答

2

您的輸入緩衝區分配只有兩個字節:

input DW ? 

你輸入的大小是零,導致ReadFile的讀取最大的0字節:

input_size DD ? 

nNumberOfBytesToRead應該傳遞一個值而不是一個指針。並且您希望寫入與讀取文件中輸入的字節數相同的字節:

INVOKE WriteFile, eax, OFFSET input, OFFSET input_size, read, 0 
INVOKE WriteFile, eax, OFFSET input, read, read, 0 
+0

很酷,非常感謝您 –

相關問題