在osx中​​以汇编语言从url下载文件

时间:2014-02-19 07:06:52

标签: macos assembly download

为了使用bash或shell下载文件,我调用execve syscall来运行curl命令

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

但问题是我想要使用我自己的代码下载文件而不是curl或其他代码。

我研究过curl源代码,但它太大而且难以弄清楚。

有没有办法在我的程序中下载文件而不使用带有intel 64的mac osx中的其他程序。

任何解决此问题的线索都将受到赞赏。

1 个答案:

答案 0 :(得分: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”,则发送所请求的文件。只需读取套接字并存储文件,直到服务器关闭套接字。

  4. 对于其他Internet协议(如FTP),模式通常是相同的,只有命令不同。

    注意:正确的错误处理比这个简单的算法要困难得多。

    参考: LSCR project 包含有关Linux系统调用和示例的非常有用的以汇编为中心的文档。