提问人:GoogleCoder 提问时间:7/16/2023 更新时间:7/20/2023 访问量:321
如何仅使用内置的Windows工具在.exe中打印“Hello world”
How to print "Hello world" in .exe with only built-in windows tools
问:
我正在尝试制作一个简单的编译器,我想在C++中获取输入并将其转换为计算机可以读取的内容。我不想使用任何像 NASM 这样的中间编译器,而是想要一种将其直接转换为 exe 的方法,而无需任何 Windows 附带的工具。因此,我真的有两个问题:如何从词法分析器中获取指令并将其转换为机器代码,然后如何运行它?print ("Hello world!")
任何帮助将不胜感激。(我的处理器是 i7-9750h,我运行的是 Windows 11)
答:
Windows 将 PE(可移植可执行文件)文件格式用于可执行 EXE 文件。本机运行任何代码本质上需要的是生成 PE 文件。它并不太复杂,网上有例子。
对于要打印“Hello World”的程序,PE 文件需要包含来自 kernel32.dll 的一些 Windows API 函数的 Import-Table,例如 WriteFile。当然,还有一个文本部分,其中包含一些代码来调用它。
我可以向你推荐我两年前在 github 上提出的一个项目,它对 C 子集语言来说正是这样做的:https://github.com/urutech/nanocc
我认为很酷的是,如果您的程序使用 print 函数 (WriteFile) 生成 PE 文件,那么您就拥有了一个不依赖任何外部工具的引导编译器的起点。第一个版本需要使用现有编译器编写,或者将十六进制代码发送到文件。至少你需要的外部工具:向文件发出二进制十六进制代码。一个灵感可能是看看有人如何从无到有地引导一个小型编译器:https://github.com/smtlaissezfaire/bcompiler
评论
csc.exe
C:\Windows\Microsoft.NET\Framework\..
print("Hello world!")
echo Hello world!