Chinaunix首页 | 论坛 | 博客
  • 博客访问: 153827
  • 博文数量: 40
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-11 09:11
文章分类

全部博文(40)

文章存档

2020年(1)

2017年(36)

2014年(3)

我的朋友

分类: C/C++

2017-03-22 13:53:10

C内嵌汇编实现hello world程序,手动执行ld进行静态链接,不依赖任何库

编译:
gcc -c write.c
-c : 编译和汇编,不进行链接

链接:
ld -static -e main -o write ./write.o
-static : 静态链接
-e main : 执行程序入口函数

源码:

点击(此处)折叠或打开

  1. #define EXITNO 23
  2. const char *str = "Hello world\n";

  3. #ifdef __x86_64__
  4. void m_print()
  5. {
  6.     asm volatile(
  7.         "syscall"
  8.         :
  9.         :"a"(1), "D"(0), "S"(str), "d"(12)
  10.         );
  11. }

  12. void m_exit()
  13. {
  14.     asm volatile(
  15.         "syscall"
  16.         :
  17.         :"a"(60), "D"(EXITNO)
  18.         );
  19. }
  20. #else
  21. void m_print()
  22. {
  23.     asm volatile(
  24.         "int $0x80"
  25.         :
  26.         :"a"(4), "b"(0), "c"(str), "d"(13)
  27.         );
  28. }

  29. void m_exit()
  30. {
  31.     asm volatile(
  32.         "int $0x80"
  33.         :
  34.         :"a"(1), "b"(EXITNO)
  35.         );
  36. }
  37. #endif

  38. int main()
  39. {
  40.     m_print();
  41.     m_exit();
  42. }
阅读(2007) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~