c - 如何在不使用任何函数的情况下用 C 编写 'Hello world' ?

标签 c assembly

我在quora上找到了这样做的方法,但我无法理解。

You can achieve this using opcodes.....

const int main[] = {  -443987883, 440, 113408, -1922629632,  4149, 899584, 84869120, 15544,  266023168, 1818576901, 1461743468, 1684828783,  -1017312735};
Now follow below steps....
Save that in hello.c
then gcc -o hello hello.c
then ./hello
Hola..... Hello World!

操作码将针对基于其架构的特定硬件和 Controller 。如果我理解正确的话,那么对于不同的硬件和平台,操作码将会有所不同。所以这不是一个通用的解决方案。但是我尝试在 IDEone 上编译它,它给出了运行时错误。有没有通用的解决方案?

Similar question on SE

最佳答案

在 C 语言中,main 函数是程序的入口点。在程序二进制文件中,函数编译成的机器代码将放置在二进制文件的 .text 部分中,以及 main 函数在符号表。

在上面的代码中,我们创建了一个具有相同main符号名称的常量数组。由于数组是常量,因此它也将被放置在二进制文件的 .text 部分中。由于 .text 部分中的任何代码都是可执行的,因此无法阻止主数组中的操作码执行。

关于c - 如何在不使用任何函数的情况下用 C 编写 'Hello world' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36151883/

相关文章:

c - 使用 fwrite() 在 C 中逐字节写入文件

c - 如果我用一个监听套接字监听 2 个端口,我如何知道哪个端口收到了数据包?

assembly - 关于 asmlinkage 的调用约定

c++ - 在 Windows 上编译/执行汇编程序的最简单方法?

assembly - 试图为 nand2tetris 书构建一台 PC(计数器),但我在逻辑上遇到了一些问题

c - C Linux 编程中的信号量

c++ - 返回类型为 struct 的函数在每次调用时不返回任何内容

c - 为什么这个简单的文件读取程序第一次运行需要 30 秒才能执行?

c - 操作系统 : Compiler Confusion

linux - 32位Linux汇编代码