Мое почтение всем. Есть некая программа, которая выполняет такие действия: printf("some_text"); scanf("some_values%d", ...); printf("some_text"); scanf("some_values%d", ...); etc. Мне надо запустить оную, прочитать, что она пишет и передать ей данные. Все хорошо, кроме передачи данных. Перенаправляю ввод/вывод, но при чтении вижу данные следующего за scanf'ом printf'а. Т.е. получается, что целевая программа откуда-то взяла данные и продолжила выполнение (printf/scanf/printf/... выполняются в одном потоке). Почему так происходит пока не понимаю. Вот код, стартующий программу и перенаправляющий ввод/вывод: Код (Text): format PE include 'win32a.inc' struct SECURITY_ATTRIBUTES nLength dd 0x0 lpSecurityDescriptor dd 0x0 bInheritHandle dd 0x0 ends HANDLE_FLAG_INHERIT = 0x1 str_cmd: db 'program.exe', 0x0 hin_read: dd 0x0 hin_write: dd 0x0 hout_read: dd 0x0 hout_write: dd 0x0 tmp: dd 0x0 buff: db 0x40 dup 0x0 pi: PROCESS_INFORMATION sinfo: STARTUPINFO sa: SECURITY_ATTRIBUTES entry start start: mov [sa + SECURITY_ATTRIBUTES.nLength], sizeof.SECURITY_ATTRIBUTES mov [sa + SECURITY_ATTRIBUTES.bInheritHandle], 0x1 mov [sa + SECURITY_ATTRIBUTES.lpSecurityDescriptor], 0x0 push 0x0 push sa push hout_write push hout_read call [CreatePipe] test eax, eax jnz @f int3 @@: push 0x0 push HANDLE_FLAG_INHERIT push dword [hout_read] call [SetHandleInformation] test eax, eax jnz @f int3 @@: push 0x0 push sa push hin_write push hin_read call [CreatePipe] test eax, eax jnz @f int3 @@: push 0x0 push HANDLE_FLAG_INHERIT push dword [hin_read] call [SetHandleInformation] test eax, eax jnz @f int3 @@: mov ecx, sizeof.STARTUPINFO mov edi, sinfo xor al, al rep stosb mov [sinfo + STARTUPINFO.cb], sizeof.STARTUPINFO mov eax, [hout_write] mov [sinfo + STARTUPINFO.hStdError], eax mov [sinfo + STARTUPINFO.hStdOutput], eax mov eax, [hin_read] mov [sinfo + STARTUPINFO.hStdInput], eax or [sinfo + STARTUPINFO.dwFlags], STARTF_USESTDHANDLES push pi push sinfo push 0x0 push 0x0 push 0x0 push TRUE push 0x0 push 0x0 push 0x0 push str_cmd call [CreateProcess] test eax, eax jnz @f int3 @@: push 0x0 push tmp push 0x40 push buff push dword [hout_read] call [ReadFile] ; <---в буфере оказывается строка следующего за scanf'ом printf'а... ret data import library kernel32, 'kernel32.dll' import kernel32,\ CreatePipe, 'CreatePipe',\ CreateProcess, 'CreateProcessA',\ SetHandleInformation, 'SetHandleInformation',\ ReadFile, 'ReadFile' end data В чем может быть причина? Заранее благодарен.