プログラムはgetsockname
まで実行され、戻り値は-1で、errno
は9です(EBADF
、不正なファイル記述子)。しかし、Androidアプリに組み込まれたコードは順調に進んでいます。getsocknameは-1を返し、errnoはEBADFですか?
void sysLibCSendHookHandler(CPUState* env, int isStart){
if(isStart){
int fd = env->regs[0];
int buf = env->regs[1];
int len = env->regs[2];
int flags = env->regs[3];
DECAF_printf("xxxxx send(%d, %p, %d, %d)\n", fd, buf, len, flags);
extern int errno;
struct sockaddr_un sock_addr;
socklen_t sock_addr_len;
sock_addr_len = sizeof(sock_addr);
int t = getsockname(fd, (struct sockaddr*)&sock_addr, &sock_addr_len);
DECAF_printf("fd:%d",fd);}
* "しかし、アンドロイドアプリで計測されたコードはうまくいく..." * - これはシミュレータに問題があることを意味しますか? – jww
'EBADF'は' getsockname() 'に渡されたファイル記述子が無効であることを意味します。このコードは*あなたが何らかの理由で 'send()'関数をフックしていることを意味しています、そうですか?どのくらい正確に?このコードは、パラメータがCPUレジスタに渡されていると仮定していますが、通常はスタックに渡されます。あなたは 'send()'パラメータが 'env-> regs []'にまったく格納されていると思いますか? –