AT&T 汇编-6: 循环

loop 指令使用 ecx 作为计数器并且在每次执行的时候自动递减 ecx 的值,直到 ecx 为 0。loop 指令的格式是

loop location

其中 location 是要跳转的程序代码的标签。loop 指令只支持 8 位的偏移量,所以只能进行短跳转(跳转偏移量小于 128 字节)。

# loop.s

.section .rodata
msg:
   .asciz   "The value of ecx is %d.\n"

.section .text
.globl main
main:
   movl  $5,   %ecx

阅读全文…

AT&T 汇编-5: 分支跳转

很多时候代码都不是从头到尾顺序依次执行的,往往需要根据条件进行跳转,改变代码的执行流程。

无条件跳转

无条件跳转就一条很简单的 jmp 命令:

jmp   location

其中 location 是要跳转到的代码位置,通常由一个标签表示。标签就是一个标识符后加一个冒号,像一直在使用的 main 和 _start 都是标签。

# jmp.s

.section .rodata
msg1:
   .ascii   "I like this mm.\n"
msg2:
   .ascii   "I like that mm.\n"

.section .text
.globl _start
_start:
   movl  $4,      %eax  # system 

阅读全文…

AT&T 汇编-3: 使用整数

AT&T 汇编中,数字不能直接使用,需要在前面加一个“$”。而且根据指令的后缀来决定使用不同长度的数,例如后缀“l”(long)通常表示使用 32 位的操作数,“w”(word)表示 16 位,“b”(byte)表示 8 位等。系统提供了不同的方式来声明不同长度的数据。

# num.s

.section .rodata
msg:
   .asciz   "The value is: 0x%x.\n"
int8:
   .byte    0xda
int16:
   .short   0xabcd
int32:
   .int     0x12345678

.section .text
.globl main
main:
   movl  $0,   %eax
   movb  int8, %al
   pushl 

阅读全文…

AT&T 汇编-2: 使用C标准库IO函数 (1)

AT&T 汇编中没有现成的输入输出数值的方法,想查看运算结果比较麻烦。不过这个功能可以通过调用 c 标准库里的 printf() 函数来实现,虽然下层调用上层的函数看起来有些奇怪,但是这的确很方便……

# cio-1.s
# using c function printf() to display a string

.section .rodata
msg:
   .asciz   "Hello, world.\n" # null-terminated string

.section .text
.globl main
main:
   pushl $msg
   call  printf
   popl  %eax

   pushl $0
   

阅读全文…

gdb 自定义命令

平常不怎么用 gdb,一般也就是找一下内存访问错误的地方然后加 printf 语句定位。这两天重写红黑树,发现新写的和原来写的输出不一致,但又不知道哪个是错的,在打印日志无果的情况下,决定试试单步调试。很多时候选择打印日志而不是单步调试是因为觉得调试有点慢,一步步走着走着自己就晕了……

不说废话了,先说一下自定义命令的方法。在家目录下建立 .gdbinit 文件,里面写上要定义的命令,gdb 启动的时候会读取这个文件里的命令,这样在调试过程中就可以使用这些自定义命令了。定义命令的方式为:

define mycmd
...
end

还可以为这条自定义的命令加上注释,这样当使用“help mycmd”的时候就会显示这些注释:

document mycmd
comments here ...
end

如果需要传递参数,可以使用 $arg0,$arg1, …,$arg9 等。例如:

define print_int
p $arg0
end

这样如果在 gdb 中使用“print_int a”时,就会打印整型 a 的值。…

阅读全文…

在本机搭建 wordpress 的一些问题

这里主要是记录一下在本地搭 blog 过程中遇到的一些问题。

这个 blog 使用的是的 wordpress 3.4.x 汉化版,插件有 google xml sitemap,wp-pagenumbers(翻页插件),wp-syntax(代码高亮)。

导入导出最好使用 cpanel 中的备份功能,如果使用 wordpress自带的导入导出功能(wordpress_importer),再次导入的时候反斜杠会丢掉!

安装apache,php和mysql

安装主题

把主题解压到 $WP_ROOT/wp-content/themes/主题名/ 下即可在“外观-主题”中找到。有时用 ftp 上传会出现错误。

修改固定链接

默认的链接名“?p=xxx”很不爽,也不利于搜索引擎检索。可以在“设置-固定链接”中修改成自己想要的格式,这个功能需要 apache 的 mod_rewrite 模块。

这里要提一下的是在本地搭建的时候可能还没有 .htaccess 文件。文件的位置应该是 wordpress 的根目录,也就是和 wp-config.php 同一层。把 .htaccess 文件修改权限为 777,然后在控制版中的“设置-固定链接”修改,保存文件,为防止误改,最后再把权限改回 644。…

阅读全文…