Forwarded from dnaugsuz
草🤔
的确 basic block 加 br 是好选择
就记得 while 和 if else 的翻译方式
builder 除了 sizeof 和指令选择 到底掩盖了什么细节呢
BB 是中端优化上的概念,对跳转回填什么的大概也没有帮助吧,和 std::list 差不多
的确 basic block 加 br 是好选择
就记得 while 和 if else 的翻译方式
builder 除了 sizeof 和指令选择 到底掩盖了什么细节呢
BB 是中端优化上的概念,对跳转回填什么的大概也没有帮助吧,和 std::list 差不多
Forwarded from dnaugsuz
记得 mips 和 arm 在子程序基础上都差不多,是有个 lr 和 sp... 看了一下是 jal/jr $ax 这样
https://github.com/Ray-Eldath/whatever/blob/master/mips/fib.a#L40
寄存器分配不会写(这个还包括溢出到栈,就是局部带限制和优先级的指令操作数存储空间的分配吧) 完全用栈的话就方便多了,等于 [a,b,c] = sp 一样的「数组解构」
https://github.com/Ray-Eldath/whatever/blob/master/mips/fib.a#L40
寄存器分配不会写(这个还包括溢出到栈,就是局部带限制和优先级的指令操作数存储空间的分配吧) 完全用栈的话就方便多了,等于 [a,b,c] = sp 一样的「数组解构」
GitHub
Ray-Eldath/whatever
Scala, Cats, Kotlin, JMH, x86, MIPS, Modern C++, and more... - Ray-Eldath/whatever
Forwarded from dnaugsuz
这个本质就是如何把代码写简单,做到高复用并且突出程序与数据的照应性。 以这种心态就没有任何教条了,也不记得任何具体技术的名称;只有子程序的输入和数据之结构的变化才是唯一所见的事。
因为只在乎输入和输出之间所经历必须的过程和代码复用,只用最基础的算法和函数式,自然就没有稀奇古怪的实现方式和设计特性了。
因为只在乎输入和输出之间所经历必须的过程和代码复用,只用最基础的算法和函数式,自然就没有稀奇古怪的实现方式和设计特性了。
Forwarded from dnaugsuz
嘛 我说的 codegen 大概是指同级语言,以减少冗余为目的的 cg,MDHD 说的是高级到低级的铺平、序列化 codegen …… 这就完全不一样了
减冗余的本质上是宏,不管理或没有上下文,只是一句话代表几句话,顶多查个全局表这样。
真的编译器 asm ,必须实现 if switch while break 基础控制流甚至 && 等惰性短路计算表达式 解析器还要支持错误列表化,挺麻烦的。
现在还是一想到就头疼,流解析组合子并不能直白便利地解决 keyword 和跳空格、计行号的问题,要在 Java/JS 里写字典树和 sourceLoc 真是最痛苦的(当然对类 C 语言读 map entries 都可以 但是比较不智能)
不过抛开控制流的翻译和层叠作用域的问题,本质上就和同级语言的翻译差不多了,四则计算指令、字面量、值引用、值输出一对应一铺平生成,并没有多少种情况,其实最小化的编程语言就个 func 个 apply ,实际编译器就是多带些 intrinsic 操作而已。
减冗余的本质上是宏,不管理或没有上下文,只是一句话代表几句话,顶多查个全局表这样。
真的编译器 asm ,必须实现 if switch while break 基础控制流甚至 && 等惰性短路计算表达式 解析器还要支持错误列表化,挺麻烦的。
现在还是一想到就头疼,流解析组合子并不能直白便利地解决 keyword 和跳空格、计行号的问题,要在 Java/JS 里写字典树和 sourceLoc 真是最痛苦的(当然对类 C 语言读 map entries 都可以 但是比较不智能)
不过抛开控制流的翻译和层叠作用域的问题,本质上就和同级语言的翻译差不多了,四则计算指令、字面量、值引用、值输出一对应一铺平生成,并没有多少种情况,其实最小化的编程语言就个 func 个 apply ,实际编译器就是多带些 intrinsic 操作而已。
Forwarded from MĐĦĐ
llvm ir 不是寄存器无限嘛,整成 ssa 然后 builder 自动分配,我学长主要做的就是这个
Forwarded from dnaugsuz
https://t.iss.one/dsuse/16745
真的想哭,当时是想两个小时完成,后来写到了晚上。本来计划这几天休息的,估计又泡汤了
真的想哭,当时是想两个小时完成,后来写到了晚上。本来计划这几天休息的,估计又泡汤了
Telegram
duangsuse::Echo
一看到 Lua 就想到一些过去的事情。 以为自己有能力了,其实还是没有啊
其实 ParserKt 也还是没好啊,其实我也还是写不出 Binary AXML 的序列化啊,其实我也还是没有写一门可以用的 JVM 语言啊,其实我也还是不会写编译器啊,更别说带 native 后端的完整东西呢
如果真的能做到,又是怎么样的情景了呢。
还是想要努力一点啊,
铝板会写五子棋规则带 AI ,我的贪吃蛇连直线都不会选
Yuuta 的 MC 能在 tgbot 直播,我连 curl 都不会用
Berd 的 js 反混淆器能…
其实 ParserKt 也还是没好啊,其实我也还是写不出 Binary AXML 的序列化啊,其实我也还是没有写一门可以用的 JVM 语言啊,其实我也还是不会写编译器啊,更别说带 native 后端的完整东西呢
如果真的能做到,又是怎么样的情景了呢。
还是想要努力一点啊,
铝板会写五子棋规则带 AI ,我的贪吃蛇连直线都不会选
Yuuta 的 MC 能在 tgbot 直播,我连 curl 都不会用
Berd 的 js 反混淆器能…
Forwarded from dnaugsuz
丝毫没有长进的动苏
两三年过去也没见得强多少
还是那个连二进制都不会的辣鸡
而且也没有在编译原理上有所进步
更别提回到 Android 了,被大佬吊着锤 什么都不懂
明明抛弃了这么多,却没有得到什么回报 还是那么的菜
为什么总是有大佬和意外的普通人能做到我不会的事情啊
两三年过去也没见得强多少
还是那个连二进制都不会的辣鸡
而且也没有在编译原理上有所进步
更别提回到 Android 了,被大佬吊着锤 什么都不懂
明明抛弃了这么多,却没有得到什么回报 还是那么的菜
为什么总是有大佬和意外的普通人能做到我不会的事情啊
Forwarded from dnaugsuz
噢……记起来了,是指 add(sub(L(10),L(5)), V(1)) 这种不用显式分配的 l/rhs
用的时候就仿佛是空气一样,不觉得有 SSA Value 这个东西,你一提我还以为是指 builder.alloca() 分配内存呢
不过如果完全不在编译期优化,这种也可以直接翻译成子程序调用…… add 什么的就做成 libcrt (会被打的
用的时候就仿佛是空气一样,不觉得有 SSA Value 这个东西,你一提我还以为是指 builder.alloca() 分配内存呢
不过如果完全不在编译期优化
Forwarded from dnaugsuz
啊……的确呢
要不然 SSA 要不然用操作数栈,否则指令存储器分配还真是不好解耦合呢
想想以后有机会看看 Lua 的寄存器分配,不过我记得那个实际上在模拟寄存器窗口,还是栈机一样 实机的寄存器一般是有限的
听说 linearscan 分配寄存器很方便,桶染色分配比较优化, 感觉挺麻烦
SSA 图也经常被忘记吧
要不然 SSA 要不然用操作数栈,否则指令存储器分配还真是不好解耦合呢
想想以后有机会看看 Lua 的寄存器分配,不过我记得那个实际上在模拟寄存器窗口,还是栈机一样 实机的寄存器一般是有限的
听说 linearscan 分配寄存器很方便,桶染色分配比较优化, 感觉挺麻烦
SSA 图也经常被忘记吧
Forwarded from dnaugsuz
解析器果然是最浅的一层呢,不过也很有用
脱糖&类型检查&翻译通用指令结构的结束
代码生成真正复杂工作的开始
一些时候都没有前后端的区分,只是通过某种处理和顺序写出指令而已 感觉不多写几次很难写好啊……
脱糖&类型检查&翻译通用指令结构的结束
代码生成真正复杂工作的开始
一些时候都没有前后端的区分,只是通过某种处理和顺序写出指令而已 感觉不多写几次很难写好啊……
Forwarded from dnaugsuz
汇编层面的 CPS 会是什么样啊…… 记得 cps 理论是不 return 的,那么就是内联 continu...
不对, CPS 代表好像是 (call-with-current-continuation
不对, CPS 代表好像是 (call-with-current-continuation
Forwarded from dnaugsuz
这么看实现一门编程语言有时很简单有时很难,而难易和语言本身特性量是没有绝对关系的
懂编译原理的人未必对其它领域也很懂,其它领域的人也未必不能在短时间内设计编译器或其它目的的翻译器
完成编译器后的高亮规则也不难完成,其与各种工具的适配也有临时解决方案,所以编译器没有什么独特的地方,就像学算法也不代表能写出好东西?🤔 明白了这件事
原来人是不应该限制自己的编程领域的,不可能一招鲜吃遍天,必须广有涉猎并且也能深究一类问题 才是最好的。
懂编译原理的人未必对其它领域也很懂,其它领域的人也未必不能在短时间内设计编译器或其它目的的翻译器
完成编译器后的高亮规则也不难完成,其与各种工具的适配也有临时解决方案,所以编译器没有什么独特的地方,就像学算法也不代表能写出好东西?🤔 明白了这件事
原来人是不应该限制自己的编程领域的,不可能一招鲜吃遍天,必须广有涉猎并且也能深究一类问题 才是最好的。
#Android #net #Security #reveng pin 证书 保护服务端客户端通信不被系统信任骚扰
自己包装静态链接的 libcurl 在里面把 pin 证书做好
再使用 HikariObfuscator/Hikari
某10:
getFixedSocketFactory?
我记得我之前干小米的时候 一是干了https://github.com/android-async-http/android-async-http/blob/ca93ab08f63c7adc6743cadb8031b719f4a71e3f/library/src/main/java/com/loopj/android/http/AsyncHttpClient.java#L306
二是干了X509TrustManager
分别对应Loopj 和okhttp3 小米同时用了俩库嗯
自己包装静态链接的 libcurl 在里面把 pin 证书做好
再使用 HikariObfuscator/Hikari
某10:
getFixedSocketFactory?
我记得我之前干小米的时候 一是干了https://github.com/android-async-http/android-async-http/blob/ca93ab08f63c7adc6743cadb8031b719f4a71e3f/library/src/main/java/com/loopj/android/http/AsyncHttpClient.java#L306
二是干了X509TrustManager
分别对应Loopj 和okhttp3 小米同时用了俩库嗯
GitHub
android-async-http/android-async-http
This project under develop. Contribute to android-async-http/android-async-http development by creating an account on GitHub.
Forwarded from dnaugsuz
啊,所以说 ssl 也挺有用啊,不接系统证书就反 MITM 了,路由器也不能读取
不过其实不管 Java 还是 Native , frida.re 都有脚本解决证书信任问题 😐 感觉这个需求蛮 general 的
抓包好像并不都要设代理,但是换证书是肯定的。
问题是 lsposed 能搞 java , stripped curl ssl 基于开源又容易被搜索吧🤔 要是对方找到相应函数地址就可以 memdump 了
不过说起来只要 webapi Client 做在 Java 就很难解决 偷窥 问题吧😒 URL 要传过去,搞不好人家用别的 HTTP 客户端 replay 一次你就白费心思了
不过其实不管 Java 还是 Native , frida.re 都有脚本解决证书信任问题 😐 感觉这个需求蛮 general 的
抓包好像并不都要设代理,但是换证书是肯定的。
问题是 lsposed 能搞 java , stripped curl ssl 基于开源又容易被搜索吧🤔 要是对方找到相应函数地址就可以 memdump 了
不过说起来只要 webapi Client 做在 Java 就很难解决 偷窥 问题吧😒 URL 要传过去,搞不好人家用别的 HTTP 客户端 replay 一次你就白费心思了