GCC内联汇编(inline assembly)的基本语法如下:

1
2
3
4
5
6
__asm__ __volatile___ (
"assembly statements"
: "output statements"
: "input statements"
: "modified descriptions"
);

__asm__表示内联汇编,__volatile__表示不要优化代码。
三个冒号后面每一个都可以有多个部分,每个部分用逗号隔开。

阅读全文 »

JamVM 没有二进制版本,只能从源码 编译安装。

JamVM只是一个虚拟机,它需要搭载一个Java class library才能正常运行,可以使用
GNU classpath,也可以使用OpenJDK,这里我们使用GNU classpath。

阅读全文 »

信号(signal)是*nix以及POSIX兼容系统中的一种进程间通讯的方法。signal大致可以做如下划分:

  • Traditional Unix signal
  • POSIX standard signal
  • POSIX real time signal

每一个信号对应一个整数值,每个信号都定义了默认行为,即进程收到信号之后默认执行的动作,
这些以及signal编程所需的其他内容都定义在signal.h中,可以通过kill -l命令查看都有
哪些signal,其中SIGRTMINSIGRTMAX之间的signal用于实时信号(real time signal)。有
多种方式可以产生信号,当然进程也有多种方式来处理信号:

  • 使用默认行为
  • 忽略信号(ignore)
  • 捕获信号(catch),即用户自定义signal handler
  • 阻塞信号(block)
阅读全文 »

正常的调用-返回流程是这样的,假如A调用B,B调用C,
则C返回到B,B返回到A,但是非本地跳转则打破了这种规则,
它可以不按照调用流程一步步返回,而是可以返回到任意地址,
例如完全可以从C中直接返回到A中,而越过B。

阅读全文 »