一种常见的写法就是用 push pop 来做:
置入代码 ({ 93, 139, 68, 36, 4, 139, 0, 139, 72, 4, 133, 201, 116, 27, 141, 64, 8, 141, 20, 8, 137, 193, 102, 255, 49, 65, 57, 209, 117, 248, 137, 193, 102, 88, 136, 1, 65, 57, 209, 117, 247, 194, 4, 0 })
但栈空间通常是有限的,因此处理不了太长的字节集。
如果需要处理很长的字节集,就需要使用别的方法,比如:
置入代码 ({ 139, 68, 36, 8, 139, 32, 139, 68, 36, 4, 137, 193, 209, 232, 131, 196, 8, 141, 84, 12, 255, 133, 192, 116, 15, 138, 12, 36, 138, 42, 136, 44, 36, 136, 10, 72, 68, 74, 235, 237, 201, 194, 4, 0 })
它对应下面的伪代码:
p = addressOf(bytes);
q = p + bytes.length - 1;
len = bytes.length / 2;
while (len--)
{
swap(p++, q--);
}
其中 bytes 表示字节集变量,其内部格式类似于:
struct _Bytes {
int num;
int length;
char buff[length];
};
看到这里,聪明的你可能已经发现了,len 这个变量实际上是可以取消掉的:
p = addressOf(bytes);
q = p + bytes.length - 1;
while (p < q)
{
swap(p++, q--);
}
把它写成汇编后,就得到了如下的代码:
置入代码 ({ 93, 139, 68, 36, 4, 139, 8, 139, 65, 4, 133, 192, 116, 20, 141, 73, 8, 141, 20, 1, 74, 138, 1, 138, 34, 136, 33, 136, 2, 65, 57, 209, 114, 242, 194, 4, 0 })
汇编倒序字节集.zip
(2.7 KB, 下载次数: 52)
|