2013-06-05 34 views
0

我目前正試圖寫入文件到目前爲止我有以下代碼追加到文件。有人知道爲什麼這不起作用嗎?它運行良好,但最終沒有任何改變。x 86程序集讀取/寫入文件

filewritemode: .asciz "a" 
filelocation: .asciz "/h/test.txt" 

_main: 

push $filelocation 
push $filewritemode 
call _fopen 
push $blabla 
push %eax 
call _fprintf 

push $result 
call _printf 
push $0 
call _exit # exit the program 

GCC是爲了打開源文件到.exe $布拉布拉使用是目前是換貨測試

+0

你如何鏈接這些庫函數? – Magn3s1um

+0

另外,不應該有一個程序集文件具有_start函數作爲入口點嗎? – Magn3s1um

+0

您可能必須先創建文件。如果您只是「寫入」一個文件...並且該文件不存在...則不會寫入任何內容。創建一個文件是一個不同的功能。打開和關閉文件也是一樣,它有時是一個不同的函數來編寫文件 – ady

回答

2

它不起作用,因爲您按錯誤順序推送了fopen的參數。參數必須從最後一個推到第一個。除此之外,您反覆推送參數,但不會再將其移除。在這種情況下,因爲您潛入exit而工作,但如果您使用ret指令返回,您會發現這會導致崩潰,因爲您將跳至其中一個推入的參數。

2

你傳入的參數fopen逆轉,一些隨機字符字符串你沒有檢查錯誤。在這種情況下,ltrace可能是你的朋友。