【发布时间】:2018-12-22 03:43:53
【问题描述】:
这是我用 NASM 完全编写的 Win32 C++ 程序的完整源代码:
http://devel.archefire.org/tmp/01_00.cpp.zip
我想与 Windows (MSVCIRT.DLL) 中的 C++ 函数进行交互。
我曾尝试运行这样的程序来打印字符串:
#include <iostream.h>
void main()
{
cout <<"Welcome to Programming in C++";
}
当我将其翻译为 NASM 时,cout 不打印任何内容:
push wideword main_printf_str_1
mov widecx,?cout@@3Vostream_withassign@@A@MSVCIRT.DLL
call wideword[??6ostream@@QAEAAV0@PBD@Z@MSVCIRT.DLL]
所以我想我需要对输入/输出流和标准“基”类进行初始化,这与使用 MSVCRT.DLL 中的 __p_iob 初始化 stdin、stdout、stderr 时所做的类似。
我需要调用哪些 C++ 函数来获取在程序集中调用 ostream 时将打印的初始化 cout,或者为什么上面的程序集不打印任何内容,就好像 cout 无效一样?
【问题讨论】:
-
你为什么要用简单的汇编语言来做呢?
-
std::cout已经存在。如果您想获得原始输出,只需使用stream.write。 -
我需要学习从普通程序集连接 C++ 环境以获得更好的可移植性,剥离未使用的代码,了解使用不同实现(GCC、MSVC、Open Watcom 等)的 C++ 代码的实际结构。 )。这只是知道如何初始化默认流和其他东西的问题。
标签: nasm