Тема: Зчитування та запис у потік на С/С++
Доброго часу доби!
Програма запускає процес, але виводить повідомлення "-ERR:incorrect ver!", а повинна зчитати і замінити необхідні байти потоку. Допоможіть розібратися. Код нижче (або приєднаний).
#include <stdio.h>
#include <malloc.h>
#include <Windows.h>
int main(int c, char **v)
{
DWORD N; STARTUPINFO si; _PROCESS_INFORMATION pi; unsigned char *buf;
// данні для заміни
unsigned char x_old[] = {0x74,0x17}; // оригінальні байти
unsigned char x_new[] = {0x90,0x90}; // байти, що на заміну
int x_off = 0x0056912C; // адреса заміни
memset(&si,0,sizeof(si));
buf=(unsigned char*)malloc(sizeof(x_old));
// запуск процесу для заміни
if (!CreateProcess(0,GetCommandLine()+strlen(v[0])+((GetCommandLine()[0]=='\"')?3:1),0,0,0,0,0,0,&si,&pi))
return printf("-ERR:run %s\x7\n",GetCommandLine()+strlen(v[0])+((GetCommandLine()[0]=='\"')?3:1));
// чекаємо завершення распаковки
for (N=0;N<69;N++) {printf("pls,wait:%c\r","-\\|/"[N%4]); Sleep(100);}
// починаємо заміну
printf("ok\n");
// перевірка версії програми
ReadProcessMemory(pi.hProcess, &x_off, buf, sizeof(x_old), &size);
if (N != sizeof(x_old)) return printf("-ERR:reading vm-memory!\x7\n");
if (memcmp(x_old,buf,sizeof(x_old))) return
printf("-ERR:incorrect ver!\x7\n");
// робимо заміну
WriteProcessMemory(pi.hProcess, &x_off,x_new,sizeof(x_new),&N);
if (N != sizeof(x_new)) return printf("-ERR:writing vm-memory!\x7\n");
}