Rust 吐槽

此文章可能引起不适,如果有 Rust 小鬼路过千万千万千万不要试图进来。

编写一个通用指针搜索器(2)

!!!注意,这篇文章中提到的性能优化方式基本仅适用于指针链扫描,不适用其它业务。

!!!这篇文章并不是接着上一篇文章写的,但有很多关联,不过很多代码,逻辑,已经发生变化。

编写一个通用指针搜索器(1)

什么是指针搜索

ASLR导致程序内存地址在启动程序时始终不同。所谓的“静态”地址是相对于程序代码(BinaryFile)的地址。有了静态地址,一旦找到它,你就可以稳定计算出这个地址,因为加载程序(BinaryFile)的地址很容易找到。不幸的是,并非所有感兴趣的内存都是“静态的”,因为这些要么需要代码黑客(通常称为ASM HACK),要么需要指针链(找到此链的过程通常被称为指针搜索)。

Go-Rust 编译器优化对比

Go

release模式 编译为x86-64

我不知道Go除了使用 go build file.go 是否还有其它命令才能真正编译为release模式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
func setBit1(reg *uint32, value uint16) {
	for i := 0; i <= 15; i++ {
		bitToSet := ((value >> i) & 1) != 0
		*reg &= ^(1 << (i + 5))
		if bitToSet {
			*reg |= 1 << (i + 5)
		} else {
			*reg &= ^(1 << (i + 5))
		}
	}
}

它生成的汇编是什么样的呢?