WriteFile函数与汇编调试(同步)

时间:2014-05-22 15:47:25

标签: c++ assembly kernel32

首先,这个问题是基于我在这里的最后一个问题:Reading Console Buffer / Output C++

我有一个已编译的可执行二进制文件。它有一些输出,我想将它重定向到另一个程序,处理行。我成功找到了输出的位置,并将其修改为STDOUT。问题是,当我使用它时:

./jampDed.exe | stdout.exe

然后输出未同步。我在每1000-2000字节之后得到了内容。

stdout.cpp

#include <iostream>

int main() {
    std::string s;
    while (std::getline(std::cin, s, '\n')) {
        std::cout << s << std::endl;
    }

    return 0;
}

我还创建了一个关于程序集修改的图片,其中默认使用了Kernel32.WriteFile函数。

ASM WriteFile

所以问题是,如何让它同步?如何在专用服务器上尽快获得每一行?

2 个答案:

答案 0 :(得分:2)

在可执行文件中的某个位置,它建立stdout是无缓冲输出的选项位。只需设置(或清除)该位。然后每次调用写入都会毫不拖延地进行传输。这为该程序增加了大量的执行时间和I / O系统工作量,但对此可能没有问题。

处理该输出(作为输入)的程序应缓冲整行,因为程序本身不太可能进行全行输出。

答案 1 :(得分:1)

你为什么不试试:

std::cout << s << std::endl << std::flush;
                               ^^^^^^^^^^