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

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

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

lazy_static! { static ref My }

打工到现在,已经记不清是七年还是八年了,回顾过去走过的路浑浑噩噩(无奈)。还是想思考一下自己究竟干了什么,该干什么。

过去 - 混乱的职业生涯

  • 小时候:老家位于黑龙江一处农场,出生在一个代号叫48的农村联队,从小和爷爷奶奶以及其它亲戚生活,吃百家饭长大,父亲常年在外打工,母亲是人贩子,刚出生的时候便把我抛弃了,从小到大没有见过母亲,搞得我爸精神也有点问题,经常自言自语骂我妈。导致我从小就喜欢乱想,不喜欢与人交流。

macOS M2 dylib注入器

在互联网找了很多相关的工具,可惜基本全都推荐用frida,其它的似乎没有一个能用的,除了不支持就是注入后程序崩溃,其中包括但不限于:

https://github.com/scen/osxinj

https://gist.github.com/vocaeq/fbac63d5d36bc6e1d6d99df9c92f75dc

但是frida我从来没有用过,感觉又脏又重,似乎还要依赖 ptrace,并且看到其它人基于它编写的工具都动不动几十MB。

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

什么是指针搜索?

在这无尽的数字深渊中,吾是探寻者,吾名KK,内存的支配者,数据的操纵者。在寂静的虚空中,我听见了那二进制的低语,它们在呼唤我,渴求着与我融合。

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))
		}
	}
}

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