2014-02-19 48 views
0

對於使用bash或殼下載文件我把execve系統調用運行curl命令下載文件彙編語言在OSX

int execve(char *fname, char **argp, char **envp); 

但問題是我要下載的文件與我自己的代碼不捲曲或其他。

我學習了curl源代碼,但它太大,很難弄清楚。

有什麼辦法下載我的程序中的文件,而無需使用Mac OSX上的另一個程序與英特爾64

解決這個問題的任何線索將不勝感激。

回答

0

從哪裏下載?

如果假設你想從WWW下載,這是很簡單的任務:

  1. 使用sys_socketcall(EAX = 102)創建一個套接字,然後連接到所需的URL,然後發送一個HTTP命令:

    http_request db "GET /file_url HTTP/1.1", 13, 10, 13, 10 
    
  2. 按行讀取套接字,直到您收到雙CRLF(如請求行中)。第一個收到的行包含HTTP狀態碼。如果這行以'200 OK'開頭,那麼一切正常。 (好吧,there are other status codes,其中一些並不完全錯誤,但對於最簡單的情況,只有'200 OK'很重要。)以下接收的行,在雙CRLF之前稱爲服務器頭,可以包含一些有用的信息,但有關詳細信息,請參閱HTTP specification

  3. 雙CRLF後,如果狀態爲'200 OK',則發送所請求的文件。只需讀取套接字並存儲文件,直到服務器關閉套接字。

對於其他Internet協議(如FTP),模式通常是相同的,只是命令不同。

注意:正確的錯誤處理可能比這個簡單的算法困難得多。

參考:LSCR project在Linux系統調用和示例中包含非常有用的以組件爲中心的文檔。