如何创build渲染3D场景的4KB Linux二进制文件?【JAVA教程】

!
也想出现在这里? 联系我们
信息

如何创build渲染3D场景的4KB Linux二进制文件?,第1张

概述如何创build渲染3D场景的4KB Linux二进制文件

我刚刚了解了4k演示场景比赛 。 它包括创build一个4KB的可执行文件,呈现一个漂亮的3D场景。 引用的演示是为windows构build的,所以我想知道如何在linux上创build4KB的OpenGL场景。

裸露的“你好世界”已经消耗8KB:

$ cat ex.c #include <st@R_403_6901@.h> int main() { printf(\”Hello worldn\”); } $ gcc -Os ex.c -o ex $ ls -l ex -rwxrwxr-x 1 cklein cklein 8374 2012-05-11 13:56 ex

Inno安装程序总是安装到pipe理员的AppData目录中

当检测到某个输出时自动取消二进制执行

从可执行文件读取并valIDation证书

Py2exe – 窗口运行后立即消失

PE文件格式 – 节表和第一节之间是什么?

perl if(-e“带有空间path的窗口){}

从生成文件运行可执行文件

什么是windows / CMD的可执行文件types? 他们的重点是什么?

获取Python可执行文件path

是否有可能生产独立的haskell可执行文件

标准设置你不能做一个小工具的主要原因是标准库的许多符号和引用被拉入你的二进制文件。 你必须明确地去除那些基本的东西。

以下是我如何做到的:

http://phresnel.org/gpl/4k/ntropy2k7/

相关选项:

主要是自我解释:

gcc main.c -o fourk0001 -Os -mfpmath=387 -mfancy-math-387 -fmerge-all-constants -fsingle-precision-constant -fno-math-errno -Wall -ldl -ffast-math -nostartfiles -nostdlib -fno-unroll-loops -fshort-double

按摩:

strip帮助您摆脱二进制文件中嵌入的不需要的符号:

strip -R .note -R .comment -R .eh_frame -R .eh_frame_hdr -s fourk0001

码:

你可能需要调整和反复试验。 有时候,一个循环会给出更小的代码,有时候是一个调用,有时候是一个内联函数。 在我的代码,例如,而不是有一个干净的链接列表,其中包含所有的花式多态的火焰转换,我有一个固定的数组,其中每个元素是一个大的实体,包含所有参数,使用或未使用,作为所有火焰的联盟每斯科特Draves火焰纸。

你的技巧将不可移植,其他版本的g ++可能会给出不理想的结果。

请注意,使用上面的参数,你不写一个main()函数,而是一个_start()函数。

另外请注意,使用库有点不同。 而不是以优雅,方便的方式链接SDL和标准库函数,而必须手动完成。 例如

voID *libSDL = dlopen( \”libSDL.so\”,RTLD_LAZY ); voID *libC = dlopen( \”libc.so\”,RTLD_LAZY ); #if 1 SDL_SetVIDeoMode_t sym_SDL_SetVIDeoMode = dlsym(libSDL,\”SDL_SetVIDeoMode\”); g_sdlbuff = sym_SDL_SetVIDeoMode(WIDTH,HEIGHT,32,SDL_HWSURFACE|SDL_DOUBLEBUF); #else ((SDL_SetVIDeoMode_t)dlsym(libSDL,\”SDL_SetVIDeoMode\”))(WIDTH,SDL_HWSURFACE|SDL_DOUBLEBUF); #endif //> need malloc,probably kinda craft (we only use it once 😐 ) //> load some sdl cruft (cruft!) malloc_t sym_malloc = dlsym( libC,\”malloc\” ); sym_rand = dlsym( libC,\”rand\” ); sym_srand = dlsym( libC,\”srand\” ); sym_SDL_Flip = dlsym(libSDL,\”SDL_Flip\”); sym_SDL_LockSurface = dlsym(libSDL,\”SDL_LockSurface\”); sym_SDL_UnlockSurface = dlsym(libSDL,\”SDL_UnlockSurface\”); sym_SDL_MapRGB = dlsym(libSDL,\”SDL_MapRGB\”);

即使没有汇编器必须受到伤害,你的代码可能会产生UB。

编辑:

哎呀,我骗了大会。

voID _start() { … asm( \”int $0x80\” :: \”a\”(1),\”b\”(42) ); }

这将使你的程序返回42。

关于为linux创建真正的ELF可执行文件的Whirlwind教程是一篇有趣的文章,通过一步一步的过程来创建尽可能小的ELF可执行文件。

我不想破坏这个结局,但是作者把它缩小到比4K小很多;)

回顾一下KSplice博客中的这篇文章。 它谈到没有标准库的链接。

https://blogs.oracle.com/ksplice/entry/hello_from_a_libc_free

总结

以上是内存溢出为你收集整理的如何创build渲染3D场景的4KB Linux二进制文件?全部内容,希望文章能够帮你解决如何创build渲染3D场景的4KB Linux二进制文件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞139 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容