1

我正在尝试编译一个 64 位可执行文件,每当我调试它时,我发现它没有正确传递值:

char buf[1024];
nret = recv(sock, buf, 1024, 0);

if( nret == 0 ) 
    break;

SOCKET s = sock;
char *ptr = buf;
int len = nret;
HandleReceive(s, ptr, len);

在handlereceives堆栈上,它说ptr是一个坏指针,所有的值都完全搞砸了!它们不是调用函数之前的样子。我能做些什么来解决这个问题?

是的,我使用视觉工作室调试器。我什至尝试为 ptr 传递一个 0x1000 的设定值。它也没有得到这个值。

我正在编译为调试。

该函数非常长,但它是这样的:

void HandleReceive(SOCKET sock, char *buf, int len)
{
    using namespace Socket;

    if( _internal_safecmp(buf, HELLO, strlen(HELLO)) )
    {
        echo("hello");

    }   
}

我已经调试了代码,问题是它没有正确访问值。

它将在 rcx 中传递一个值,但随后期望传递的相同值在 r10 中......所以它必须是编译器的一个错误。有没有什么办法解决这一问题?

4

0 回答 0