|
我用 uclinux 把 bridge, netfilter 都开了,发现在 netfilter.c 的 nf_iterate 出现了古怪的事情:
if (hook_thresh > elem->priority){
printk(KERN_INFO "%s:%d:skipped.\n",
__FUNCTION__,__LINE__); // I added this line for debugging.
continue;
}
当 hook_thresh=INT_MIN, elem->priority=INT_MAX 时,这个判断居然成功了,也就是说 -2147483648 > 2147483647 !
后来看了汇编,也就是 cmp, ble 挺象那么回事,稍特别的是 cmp 的两个参数 r6, r4 是 ldr 进来的,后来我在 nf_iterate 中写了一堆 code 发现 ldr 的都会有这个问题。
不过我写了个应用层的 code 跑就没这个问题了,也样也是用 ldr 的。在 Skyeye 的 armemu.c 里 CMP(0x15) 那段写了点 log 发现在 nf_iterate 里跑到 cmp 时根本没落到 CMP 这段 code!
怀疑是指令解码有问题。郁闷啊。 |
|