0

私は現在、コンパイルされた C プログラムを調査しています。socketgethostbynameおよびconnectコード全体の複数の呼び出しにより、複数のネットワーク要求が行われることを私は知っています。さらに、私はプログラムを実行して見つけたGETので、それが要求を行っていることを知っています。strings

このプログラムを実行して、ネットワーク呼び出しを行わずに調査できるようにしたいと考えています。ただし、これを行うには、指定された関数だけで get リクエストをシミュレートする必要があります。

コンパイルして追加した次のコードがありますLD_PRELOAD

#include <netdb.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>

int socket(int domain, int type, int protocol) {
    fprintf(stderr, "socket(%d, %d, %d)\n", domain, type, protocol);
    // TODO Return actual socket which contains request
    return 1;
}

struct hostent HOST;
struct hostent *gethostbyname(const char*name) {
    fprintf(stderr, "gethostbyname(%s)\n", name);
    return &HOST;
}

int connect(int sockfd, const struct sockaddr *addr, socklen_t addr_len) {
    int name_len = addr_len - sizeof(struct sockaddr);
    fprintf(stderr, "Connecting to: %*.s\n", name_len, addr->sa_data);
    return 0;
}

これは機能しているように見えますが、ソケットから出力して受信するものをほとんど理解できません。

私はまた、問題に対する他の解決策にもオープンです。

4

0 に答える 0