gpt4 book ai didi

c++ - 如何读取 EXE 字节,存储到 char 数组,然后将字节写入新的 EXE 文件?

转载 作者:行者123 更新时间:2023-11-28 04:32:31 25 4
gpt4 key购买 nike

我正在尝试从 EXE 文件中读取字节,通过套接字发送字节,然后将字节写入另一个 EXE 文件。问题是当我将字节写入 EXE 文件然后尝试打开 EXE 时,Windows 抛出一个错误:

image

这是我从原始 EXE 文件中读取字节的代码:

if (newConnection == 0)
{
std::cout << "Error accepting connection\n\n" << std::endl;
}
else
{
std::cout << IP << " successfully connected to the client.\n\n" << std::endl;

std::ifstream fl("C:\\readbyte.exe");
fl.seekg(0, fl.end);
int length = fl.tellg();
char *buffer = new char[length];
fl.seekg(0, fl.beg);
fl.read((char*)buffer, length);
fl.close();
std::cout << buffer << std::endl;
send(newConnection, (char*)buffer, length, 0);

}

这是我将字节写入新 EXE 文件的代码:

if (connect(Connection, (SOCKADDR*)&addr, sizeof(addr)) != 0) // if we are unable to connet
{
MessageBoxA(NULL, "Failed to connect", "Error", MB_OK | MB_ICONERROR);

}
else
{
std::cout << "Connected to server.\n" << std::endl;

std::vector<char> file(11776);
std::cout << "Test1" << std::endl;
if (recv(Connection, (char*)&file[0], file.size(), 0) < 0)
{
std::cout << "Test2" << std::endl;
puts("Recv failed\n");
system("pause");
return -1;
}
else
{
std::cout << "Test3" << std::endl;
std::cout << "File recieved: " << std::endl;

/*for (int i = 0; i < file.size(); i++)
{
std::cout << file[i];
if (int(file[i]) == 0)
{
file.erase(file.begin() + i);
}

}*/
const char *path = "C:/Users/Public/writefile.exe";
std::ofstream fout(path, std::ios::binary | std::ios::out);
fout.flush();
fout.write((char*)&file[0], file.size());
fout.close();


std::cout << "File size is: " << file.size() << std::endl;

closesocket(Connection);
}

我不确定我做错了什么。我已经为此工作了 2 天。

编辑:回答

std::ifstream fl("C:\\readbyte.exe", std::ios::out | std::ios::binary);

我忘了包含 std::ios::out |服务器 ifstream 中的 std::ios::binary。我还调换了 out 和 binary 参数。

最佳答案

以二进制模式打开文件(将 std::ios::binary 作为 ifstream 的第二个参数)

关于c++ - 如何读取 EXE 字节,存储到 char 数组,然后将字节写入新的 EXE 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52472887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com