为了使用bash或shell下载文件,我调用execve syscall来运行curl命令
int execve(char *fname, char **argp, char **envp);
但问题是我想要使用我自己的代码下载文件而不是curl或其他代码。
我研究过curl源代码,但它太大而且难以弄清楚。
有没有办法在我的程序中下载文件而不使用带有intel 64的mac osx中的其他程序。
任何解决此问题的线索都将受到赞赏。
答案 0 :(得分:0)
从哪里下载?
如果您想从WWW下载,那么这是一项非常简单的任务:
使用sys_socketcall(eax = 102)创建套接字,然后连接到所需的URL,然后发送HTTP命令:
http_request db "GET /file_url HTTP/1.1", 13, 10, 13, 10
逐行读取套接字,直到收到双CRLF(如请求行中)。第一个接收的行包含HTTP状态代码。如果这一行以'200 OK'开头,则一切正常。 (好吧, there are other status codes ,其中一些不是错误的,但对于最简单的情况,只有'200 OK'很重要。)以下接收的行,在双CRLF之前是所谓的服务器标题可以包含一些有用的信息,但有关详细信息,请阅读 HTTP specification 。
在双CRLF之后,如果状态为“200 OK”,则发送所请求的文件。只需读取套接字并存储文件,直到服务器关闭套接字。
对于其他Internet协议(如FTP),模式通常是相同的,只有命令不同。
注意:正确的错误处理比这个简单的算法要困难得多。
参考: LSCR project 包含有关Linux系统调用和示例的非常有用的以汇编为中心的文档。