Forwarded from 爱学习的小天才 (yv | 低端人口 | AS25)
既然都用 fgetc 输入字符了 用 fgets 输入文件名会死嘛((
duangsuse::Echo
呃... 因为今天估计错了,然后现在要去上学 #school 所以赶快举个 r2 动态调试的例子来:赶快讲了你们学到了然后我就走的,那个下周说 (C 语言入门难度,真的) 首先我们的程序 #include <stdio.h> #include <stdlib.h> #include <string.h> static char *msg = "duangsuse 菜鸡\n"; int main(int argc, const char **argv) { char *str = malloc(sizeof(msg));…
This media is not supported in your browser
VIEW IN TELEGRAM
那么呢,每周回家都有每周的任务,要不然会非常无聊 #life #tech #dev #daily #Learn
#Java
每次呢看的书好像比较多,又都是轮流转结果可能最后一周完了枚举不出来自己看了什么书比较尴尬,大概是操作系统和嵌入式的,JVM 的也有,但大概是记住了吧。
📚 最近会开始掺杂一些文化课的书学习,由于 CS 的书看的比较多我发现自己的智商和认知理解至于记忆能力都有很大的提升(也可能是年龄关系,目前大概是 17 岁吧,和某 GAN(生成式对抗神经网络,14 年的)算法的 19 岁美国大佬少年还差两年,逃,当然和某些 17 岁就上博士的奇幻人生就比不了了)
主要的原因是有时候看 #CS/IT 系的书比较累
并且愿意尝试补习一下数学,数学里解析几何暂时还有点难理解,其他的代数问题大概都好,因为我现在也稍微有点工程数据结构算法分析能力。
之前一直觉得很难看的数学公式式的表达方式突然觉得没有那么难看了,觉得很自然,也有兴趣理解他们所表示的含义。
这周今天大概就是专门讲讲 r2 x86 架构逆向工程和 #Android Dalvik/Native 逆向工程顺便混杂一点信息工程理论、编译原理什么的,因为我不得不使笔记记录几乎停止,要不然的确有队爆的可能(跑)
#Book 顺便将会发点书单什么的(跑),当然之前我有资料单,不过很早之前了,你们可以自己在文件里面找(皮)
总之就四个字:逆向工程
逆向工程
逆向工程
逆向工程(
(我们可以
(出人意料吗?很多后端不是没有做前端的能力,比如 r2 的主要开发者 @pancake 就既写 CLI 的 Visual Viewer 也写 HTML
(讲道理,我觉得 Qt 的桌面开发者可能技术反而比 Android Views SDK 的要高
当然密码学之类的是不涉及的,如何解决别人反逆向工程(这里是说,那种高等 native 后端程序员的代码保护方法(比如 false disassembly 也即『花指令』),不是 JVM 开发者或者 Lua 这种托管给别人虚拟机运行的那种,而且不是不会去考虑什么指针不指针内存不内存分页不分页线程不线程分配不分配阻塞不阻塞堆不堆栈不栈动态链接不动态链接的什么混淆压缩然后用某某公司团队或者个人的加固工具『加固』『加密』(然后运行时类加载、虚拟机加载的时候解密载入内存,最后被人扫 file magic 再内存 dump 出来)的那种,不是内建虚拟机什么的,当然内建虚拟机解释不是说就不能 hack 了,记住所有程序逻辑都在你的机器上执行)也是不涉及的,目标是入门和简单的使用,以及给你一个运行时的视角,使你基本可以进行软件分析什么的(
#talk #backend #OS #PL #Sysadmin #CS
(这里底层素质的优势就显现出来了,虽然底层知识并不特殊,但它能给你更广阔的视角,而不是局限在应用的 Resources、Dalvik EXecutable、JNI 库接口和 HTTP 协议那层)
(说到这里忍不住感叹一下,现在又有多少开发者看得到 IL、汇编层面的东西?都是一群只知混淆处理模糊名称算法的,而且自己还不一定会写,自己连自己平台编译完后生成的东西文件结构都不知道的多的去了...)
(当然,这里能写 Java Annotation Processor 程度能力的自然也是明白人了,至少他们有学习能力吧?至少透过 Java 代码文本看到 AST 了吧?)
(好吧,AST、PSI(就是 JB 的 AST)什么的其实也是基本技能,编译优化那才是大佬... 什么逃逸分析、指针别名、代数化简指令合并、公共子表达式消除、向量化、积极虚方法内联的复杂算法...)
(那你这么说 ANN 那群 AI 开发者不是更 dalao 了么?(也不一定(现在编译优化都在用人工智能系算法了么?(启发式至少有吧
(成天批判术语... 其实还是躲不开吧,我所批判的大概是知识层次浅但是不知道自己知识层次浅的那些开发者吧...
(你的意思是你是大佬?(对不起我没有这个意思,我,duangsuse,菜鸡,菜爆了,啥算法都不会写,最讨厌图算法和动态规划(跑
(当然诸如 @RikkaW 这种 C++ 大佬自然也是大佬了(吐槽:有什么必然联系么?)
(当然,给编译原理的大佬们澄明一下,我不是带坏小白,编译是个非常抽象的翻译过程,不一定非得序列化生成文件存盘的,我只是想说明一个常用模式)
(最后:
(总结:
(吐槽:你又飘了,菜鸡 (回:你的意思是我给 Echo 加了那么多 admin,随便他们发广播,可是他们没一个人评价我的广播... (不过,羽毛 @kodamasakuno 你不评价吗...)
(就是说,至少和那些专科高中的比,我学得很快了吧?不行吗?至少我是在身边完全没有电脑的情况下看书自学的,而且学的还不是应用层的东西,,, 而且我有做框架的能力他们只有用框架的份... 而且我会设计不那么线性一点的算法... 不是挺好么?而且我也会 #CG 画画... 而且我可能会写地图生成器这种随机自动生成的算法... 而且我有实用的数学和逻辑学基础.... 比方说... 呃... 偏序理论?(不会)好吧... well done...
(最后再澄明一下 #disclaimer 我真的真的不针对任何人,因为大家都是这样的,不要对号入座)
(如果要把 Lua 开发者(不是 Androlua 这种)的综合技术素质和 JVM 开发者比的话,我一般觉得 Lua 开发者的素质更好,理由是知道 #Lua 的人一般都会写 #C/C++,不是把 C/C++ 当成 Java 写的那种))
JVM 平台的一些东西可能也讲一下,如果顺手的话,可能明天也要写个 Android 应用 Reflector,尝试提供一个 Dalvik 反射类信息获取 API 的前端,模块化面向接口设计方便扩展。(别喷什么低级技能之类的...
其实每次学到的东西比较多,甚至 Android 开发上的也有(主要是带手机去学校,看一些 Androlua 开发手册上的有点 Android/Java API 使用讲解),只是知识不系统。可是,现在又有几个 Android 开发者的知识真正是系统的呢?(笑)不过是经验之谈而已吧。只是单单靠着自己本来的能力学,学到的知识基本都是 Implicit 的,你控制不了它,你『有那么一点点感觉』但『又的确不能说出它是什么』,这样弄了两三年工程发现都是自己作为搜索引擎和模式识别机器写出的代码,比较线性比较模式化,而且除了可能的名利没有什么太大的理论上的收获,可能也会比较尴尬(笑),当然我之前是不知道有所谓的理论的,我眼里只有应用编程。只有看代码看文档写代码,当然所谓学习其实也不过如此嘛。只是能看破封装的开销有点大了,不如哪怕自己的代码不那么 parallelism 也好(愉悦即可,什么留给后端吧... 反正各种线程同步、什么内核模式用户模式、同步块原子操作什么的都...
JVM 『著名』的双检锁技术(Double-checked Locking,DCL,一种用来解决 singleton 单件实例对象模式线程竞争问题的方案,虽然比较慢)都不知道有没有 Android Developer 会,大概是只知异步不懂并发了吧... 包装啊包装... 万能的包装... 万能的社区库... JMM(Java 内存模型)那(一 JVM 书)讲的什么 store、assign 和 write 这几个语义几乎一样的词用起来总是弄不清楚... 缓存同步啊缓存同步... 不会啊... ...
#Java
每次呢看的书好像比较多,又都是轮流转结果可能最后一周完了枚举不出来自己看了什么书比较尴尬,大概是操作系统和嵌入式的,JVM 的也有,但大概是记住了吧。
📚 最近会开始掺杂一些文化课的书学习,由于 CS 的书看的比较多我发现自己的智商和认知理解至于记忆能力都有很大的提升(也可能是年龄关系,目前大概是 17 岁吧,和某 GAN(生成式对抗神经网络,14 年的)算法的 19 岁美国大佬少年还差两年,逃,当然和某些 17 岁就上博士的奇幻人生就比不了了)
主要的原因是有时候看 #CS/IT 系的书比较累
并且愿意尝试补习一下数学,数学里解析几何暂时还有点难理解,其他的代数问题大概都好,因为我现在也稍微有点工程数据结构算法分析能力。
之前一直觉得很难看的数学公式式的表达方式突然觉得没有那么难看了,觉得很自然,也有兴趣理解他们所表示的含义。
这周今天大概就是专门讲讲 r2 x86 架构逆向工程和 #Android Dalvik/Native 逆向工程顺便混杂一点信息工程理论、编译原理什么的,因为我不得不使笔记记录几乎停止,要不然的确有队爆的可能(跑)
#Book 顺便将会发点书单什么的(跑),当然之前我有资料单,不过很早之前了,你们可以自己在文件里面找(皮)
总之就四个字:逆向工程
逆向工程
逆向工程
逆向工程(
(我们可以
r2 - (malloc 512 bytes)w 逆向工程
pr 3*4(跑,因为我还不怎么会 r2lang,不知道循环怎么弄,他们那个蛮 #Unix-style 的,就是一切皆大部分可打印字符串,包括 ESIL(Evaluatable Strings Intermidiate Language)都是蛮像 Brainf**k 的字符串语言)
(出人意料吗?很多后端不是没有做前端的能力,比如 r2 的主要开发者 @pancake 就既写 CLI 的 Visual Viewer 也写 HTML
(讲道理,我觉得 Qt 的桌面开发者可能技术反而比 Android Views SDK 的要高
当然密码学之类的是不涉及的,如何解决别人反逆向工程(这里是说,那种高等 native 后端程序员的代码保护方法(比如 false disassembly 也即『花指令』),不是 JVM 开发者或者 Lua 这种托管给别人虚拟机运行的那种,而且不是不会去考虑什么指针不指针内存不内存分页不分页线程不线程分配不分配阻塞不阻塞堆不堆栈不栈动态链接不动态链接的什么混淆压缩然后用某某公司团队或者个人的加固工具『加固』『加密』(然后运行时类加载、虚拟机加载的时候解密载入内存,最后被人扫 file magic 再内存 dump 出来)的那种,不是内建虚拟机什么的,当然内建虚拟机解释不是说就不能 hack 了,记住所有程序逻辑都在你的机器上执行)也是不涉及的,目标是入门和简单的使用,以及给你一个运行时的视角,使你基本可以进行软件分析什么的(
#talk #backend #OS #PL #Sysadmin #CS
(这里底层素质的优势就显现出来了,虽然底层知识并不特殊,但它能给你更广阔的视角,而不是局限在应用的 Resources、Dalvik EXecutable、JNI 库接口和 HTTP 协议那层)
(说到这里忍不住感叹一下,现在又有多少开发者看得到 IL、汇编层面的东西?都是一群只知混淆处理模糊名称算法的,而且自己还不一定会写,自己连自己平台编译完后生成的东西文件结构都不知道的多的去了...)
(当然,这里能写 Java Annotation Processor 程度能力的自然也是明白人了,至少他们有学习能力吧?至少透过 Java 代码文本看到 AST 了吧?)
(好吧,AST、PSI(就是 JB 的 AST)什么的其实也是基本技能,编译优化那才是大佬... 什么逃逸分析、指针别名、代数化简指令合并、公共子表达式消除、向量化、积极虚方法内联的复杂算法...)
(那你这么说 ANN 那群 AI 开发者不是更 dalao 了么?(也不一定(现在编译优化都在用人工智能系算法了么?(启发式至少有吧
(成天批判术语... 其实还是躲不开吧,我所批判的大概是知识层次浅但是不知道自己知识层次浅的那些开发者吧...
(你的意思是你是大佬?(对不起我没有这个意思,我,duangsuse,菜鸡,菜爆了,啥算法都不会写,最讨厌图算法和动态规划(跑
(当然诸如 @RikkaW 这种 C++ 大佬自然也是大佬了(吐槽:有什么必然联系么?)
(当然,给编译原理的大佬们澄明一下,我不是带坏小白,编译是个非常抽象的翻译过程,不一定非得序列化生成文件存盘的,我只是想说明一个常用模式)
(最后:
radare2 这种灭天地的逆向工程分析框架才是真理啊!世界上最好的『二进制编辑器、扇区编辑器、系统 I/O 工具、二进制可视化分析工具(like bindiff、base conversion)、反汇编器/JIT 替换汇编器、Shellcode 工具、逆向代码分析器、动态静态调试器、解析器』而且非常『可扩展、可移植、可嵌入』(总结:
Cross-platform unix-like multi-architecture reverse engineering framework and commandline toolchain for security/forensics. wow. debug.exe(MSDOS) for the 21ₛₜ century
(最后:真正的无知不是知识匮乏,你看我以前那么匮乏现在不都好很多了么?都是靠积累学习思考实践的,没有本本我能做到这么快吗?(吐槽:你又飘了,菜鸡 (回:你的意思是我给 Echo 加了那么多 admin,随便他们发广播,可是他们没一个人评价我的广播... (不过,羽毛 @kodamasakuno 你不评价吗...)
(就是说,至少和那些专科高中的比,我学得很快了吧?不行吗?至少我是在身边完全没有电脑的情况下看书自学的,而且学的还不是应用层的东西,,, 而且我有做框架的能力他们只有用框架的份... 而且我会设计不那么线性一点的算法... 不是挺好么?而且我也会 #CG 画画... 而且我可能会写地图生成器这种随机自动生成的算法... 而且我有实用的数学和逻辑学基础.... 比方说... 呃... 偏序理论?(不会)好吧... well done...
(最后再澄明一下 #disclaimer 我真的真的不针对任何人,因为大家都是这样的,不要对号入座)
(如果要把 Lua 开发者(不是 Androlua 这种)的综合技术素质和 JVM 开发者比的话,我一般觉得 Lua 开发者的素质更好,理由是知道 #Lua 的人一般都会写 #C/C++,不是把 C/C++ 当成 Java 写的那种))
JVM 平台的一些东西可能也讲一下,如果顺手的话,可能明天也要写个 Android 应用 Reflector,尝试提供一个 Dalvik 反射类信息获取 API 的前端,模块化面向接口设计方便扩展。(别喷什么低级技能之类的...
其实每次学到的东西比较多,甚至 Android 开发上的也有(主要是带手机去学校,看一些 Androlua 开发手册上的有点 Android/Java API 使用讲解),只是知识不系统。可是,现在又有几个 Android 开发者的知识真正是系统的呢?(笑)不过是经验之谈而已吧。只是单单靠着自己本来的能力学,学到的知识基本都是 Implicit 的,你控制不了它,你『有那么一点点感觉』但『又的确不能说出它是什么』,这样弄了两三年工程发现都是自己作为搜索引擎和模式识别机器写出的代码,比较线性比较模式化,而且除了可能的名利没有什么太大的理论上的收获,可能也会比较尴尬(笑),当然我之前是不知道有所谓的理论的,我眼里只有应用编程。只有看代码看文档写代码,当然所谓学习其实也不过如此嘛。只是能看破封装的开销有点大了,不如哪怕自己的代码不那么 parallelism 也好(愉悦即可,什么留给后端吧... 反正各种线程同步、什么内核模式用户模式、同步块原子操作什么的都...
JVM 『著名』的双检锁技术(Double-checked Locking,DCL,一种用来解决 singleton 单件实例对象模式线程竞争问题的方案,虽然比较慢)都不知道有没有 Android Developer 会,大概是只知异步不懂并发了吧... 包装啊包装... 万能的包装... 万能的社区库... JMM(Java 内存模型)那(一 JVM 书)讲的什么 store、assign 和 write 这几个语义几乎一样的词用起来总是弄不清楚... 缓存同步啊缓存同步... 不会啊... ...
java.util.concurrent 这个包存不存在都不知道有没有人知道呢,或许(笑)
duangsuse::Echo
呃... 因为今天估计错了,然后现在要去上学 #school 所以赶快举个 r2 动态调试的例子来:赶快讲了你们学到了然后我就走的,那个下周说 (C 语言入门难度,真的) 首先我们的程序 #include <stdio.h> #include <stdlib.h> #include <string.h> static char *msg = "duangsuse 菜鸡\n"; int main(int argc, const char **argv) { char *str = malloc(sizeof(msg));…
那么就先写这个 r2 动态调试的简单教程,暂定使用 Markdown
duangsuse::Echo
那么呢,每周回家都有每周的任务,要不然会非常无聊 #life #tech #dev #daily #Learn #Java 每次呢看的书好像比较多,又都是轮流转结果可能最后一周完了枚举不出来自己看了什么书比较尴尬,大概是操作系统和嵌入式的,JVM 的也有,但大概是记住了吧。 📚 最近会开始掺杂一些文化课的书学习,由于 CS 的书看的比较多我发现自己的智商和认知理解至于记忆能力都有很大的提升(也可能是年龄关系,目前大概是 17 岁吧,和某 GAN(生成式对抗神经网络,14 年的)算法的 19 岁美国大佬少年还差两年,逃,当然和某些…
今天尝试
ESIL 调试没试过,但模拟执行都不行,Invalid instruction
反正就是我写了很多 rlang 命令,比如
反正很失败就是了,但我要努力做哪怕是让自己觉得失败的事情,失败是成功之母,学习如逆水行舟不进则退,害怕失败意味着技术止步不前。
CLI 的最完整,但动态分析老是有问题,甚至连
Cutter 的前端命令行都感觉有问题,一些命令没法用
Web 前端的也有问题,有时候 color escape 还还算不了
https://github.com/coreutils/coreutils/blob/master/src/yes.c
源代码,我一直以为没有那么复杂的... 其实非常复杂,不只是
明天再弄自己那个吧...
嘛,今天晚上再听点歌,前途似海来日方长,第二天原顺序执行,睡觉去喽~
r2 /bin/yes 了一下,最后除了找到了那个 'y' 字符之外就没啥了,调试的时候就很失败... r2 的模拟执行和实际 rarun 调试都不行,rarun 在打断点的时候会 unmapped location,让人感觉好像是过分的动态链接...ESIL 调试没试过,但模拟执行都不行,Invalid instruction
反正就是我写了很多 rlang 命令,比如
i*、d*、p*、v*、a* 什么的,结果只是没有效果... 我不知道自己在干什么反正很失败就是了,但我要努力做哪怕是让自己觉得失败的事情,失败是成功之母,学习如逆水行舟不进则退,害怕失败意味着技术止步不前。
CLI 的最完整,但动态分析老是有问题,甚至连
main 上断点都做不到Cutter 的前端命令行都感觉有问题,一些命令没法用
Web 前端的也有问题,有时候 color escape 还还算不了
https://github.com/coreutils/coreutils/blob/master/src/yes.c
源代码,我一直以为没有那么复杂的... 其实非常复杂,不只是
for (;;) { putchar('y'); } 而已明天再弄自己那个吧...
嘛,今天晚上再听点歌,前途似海来日方长,第二天原顺序执行,睡觉去喽~
GitHub
coreutils/src/yes.c at master · coreutils/coreutils
upstream mirror. Contribute to coreutils/coreutils development by creating an account on GitHub.
duangsuse::Echo
今天尝试 r2 /bin/yes 了一下,最后除了找到了那个 'y' 字符之外就没啥了,调试的时候就很失败... r2 的模拟执行和实际 rarun 调试都不行,rarun 在打断点的时候会 unmapped location,让人感觉好像是过分的动态链接... ESIL 调试没试过,但模拟执行都不行,Invalid instruction 反正就是我写了很多 rlang 命令,比如 i*、d*、p*、v*、a* 什么的,结果只是没有效果... 我不知道自己在干什么 反正很失败就是了,但我要努力做哪…
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
今天尝试 r2 /bin/yes 了一下,最后除了找到了那个 'y' 字符之外就没啥了,调试的时候就很失败... r2 的模拟执行和实际 rarun 调试都不行,rarun 在打断点的时候会 unmapped location,让人感觉好像是过分的动态链接... ESIL 调试没试过,但模拟执行都不行,Invalid instruction 反正就是我写了很多 rlang 命令,比如 i*、d*、p*、v*、a* 什么的,结果只是没有效果... 我不知道自己在干什么 反正很失败就是了,但我要努力做哪…
『当一个人发现自己已经不需要学习即通晓万物的时候,他的技术造诣就危险了』
『当一个人觉得自己是天才,天资异于常人但又不是经过客观评价而得出结论的时候,他就很难达到比较高的技术水平』
『当一个人会对别人的改进性意见产生负面情绪时,至少这表明他得独自完成改动枚举的过程』
(当然这个不涉及道德上的问题,纯技术性的
(其实,我觉得很奇怪,当然为了减少误会,我必须再次澄清一下,虽然貌似是针对某个人的(因为我确乎是根据自己的经历编造了几个,难免的),但其实我没有特殊的意思,只是泛泛的说一个群体而已。我相信这种人平时还是能遇到的
而对于 duangsuse 这种偶尔有些崩坏的而且不是天才而且其实身体条件未必够的人来说,首先的任务应该是考虑如何让自己正常活下去,再是考虑别的事情... 😶
『当一个人觉得自己是天才,天资异于常人但又不是经过客观评价而得出结论的时候,他就很难达到比较高的技术水平』
『当一个人会对别人的改进性意见产生负面情绪时,至少这表明他得独自完成改动枚举的过程』
『当你一直取得成功而从未失败的时候,你就应该静下心来反省,好好考虑是不是你做的事情太简单太机械化了』(固定句式,那个『他』当然是上文里的『那个人』喽,可惜我在考虑解析几何的时候没有这种理解速度...
(当然这个不涉及道德上的问题,纯技术性的
(其实,我觉得很奇怪,当然为了减少误会,我必须再次澄清一下,虽然貌似是针对某个人的(因为我确乎是根据自己的经历编造了几个,难免的),但其实我没有特殊的意思,只是泛泛的说一个群体而已。我相信这种人平时还是能遇到的
而对于 duangsuse 这种偶尔有些崩坏的而且不是天才而且其实身体条件未必够的人来说,首先的任务应该是考虑如何让自己正常活下去,再是考虑别的事情... 😶
duangsuse::Echo
接下来可以分析 BEL 具体是如何优化的(因为已经实现了 BEL,并且代码别无二致) 我们的 BEL 公式 LLVM 优化后是这样的: BEL: # @BEL lea eax, [4*rdi - 4] cdqe imul rax, rax, 1431655766 mov rcx, rax shr rcx, 63 …
曾经突然能理解 x86 CDEF 汇编调用栈维护
并且写出自己第一个真正意义上物理机线性 0~2 地址代码的时候
仿佛已经是在脑后,成为过去
工程好像没有时间,好像又不想工程
学的技能好像没有学...
永远就是这样的吗?每次攻克一个自己所谓的『难关』
增加一个新的技能,增加一组新的知识,增加一个新的知识系统
好像完成之后,就成为理所当然一样,成为自己下一个证明的既成条件
好像爬山一样,的确在往上爬,可是,有没有爬了一段后,突然忘记自己所在的高度呢?
... 最大的问题是自己都在学了什么东西?自己现在会什么东西?好像一个
连遍历都难啊
还是和自己的那些同学们一样,或许,他们也不知道吧... 或许有人知道自己学会了什么... 只是因为自学所以这样吗?所以我学到了什么呢?我是什么水平呢?可能是小应用都不会写的水平吧...
他们总是一年一年的玩各种新的手机游戏... 对了,我还不会 GLSL... 我不知道
其实我这段时间应该一直都是在打所谓的理解力基础,有了基础大概做什么都容易一些吧... 大概 😶
并且写出自己第一个真正意义上物理机线性 0~2 地址代码的时候
仿佛已经是在脑后,成为过去
工程好像没有时间,好像又不想工程
学的技能好像没有学...
永远就是这样的吗?每次攻克一个自己所谓的『难关』
增加一个新的技能,增加一组新的知识,增加一个新的知识系统
好像完成之后,就成为理所当然一样,成为自己下一个证明的既成条件
好像爬山一样,的确在往上爬,可是,有没有爬了一段后,突然忘记自己所在的高度呢?
... 最大的问题是自己都在学了什么东西?自己现在会什么东西?好像一个
WeakSet 集合,只能使用 contains(_) 方法(就是数学上的 A∍a, 中间这个符号叫 containsAsMember)连遍历都难啊
into_iter() -> !
我学了什么?What have I learnt?还是和自己的那些同学们一样,或许,他们也不知道吧... 或许有人知道自己学会了什么... 只是因为自学所以这样吗?所以我学到了什么呢?我是什么水平呢?可能是小应用都不会写的水平吧...
他们总是一年一年的玩各种新的手机游戏... 对了,我还不会 GLSL... 我不知道
vec2 和 vec4 是什么关系... color 又是什么...其实我这段时间应该一直都是在打所谓的理解力基础,有了基础大概做什么都容易一些吧... 大概 😶
https://ice1000.org/2018/12/08/SomeTweaks/
#blog #recommended #yearPassed
顺推隔壁的跨年笔记,当然,我不如他,所以,我都不知道我学了什么,PLT 反正也就是入门刚刚而已,因为我也才知道如何抽象程序逻辑,基本的 operators(+, -, *, /, add, contains, iterator 这种)、primitives(int, long, short)、markers([], *, ref, parametric polymorphic 等) 组合什么的,函数式也才是入门,然后就没有额外资本去学习高级类型系统方面的知识什么的
那么我明年的梦想是重新开一个博客,名字我都想好了,就叫 "IJKTree"
当然也建议大家都发一下自己的跨年笔记什么的(不要不写啊
#blog #recommended #yearPassed
顺推隔壁的跨年笔记,当然,我不如他,所以,我都不知道我学了什么,PLT 反正也就是入门刚刚而已,因为我也才知道如何抽象程序逻辑,基本的 operators(+, -, *, /, add, contains, iterator 这种)、primitives(int, long, short)、markers([], *, ref, parametric polymorphic 等) 组合什么的,函数式也才是入门,然后就没有额外资本去学习高级类型系统方面的知识什么的
谢谢各位读者对这个幼稚的博客的关注今年的跨年笔记我晚点写,因为今年真的... 很乱,真的... 学了很多,我尽可能枚举,利用 Telegram 频道的历史记录,这是我自己的感觉。欢迎喷啊
那么我明年的梦想是重新开一个博客,名字我都想好了,就叫 "IJKTree"
当然也建议大家都发一下自己的跨年笔记什么的(不要不写啊
duangsuse::Echo
https://ice1000.org/2018/12/08/SomeTweaks/ #blog #recommended #yearPassed 顺推隔壁的跨年笔记,当然,我不如他,所以,我都不知道我学了什么,PLT 反正也就是入门刚刚而已,因为我也才知道如何抽象程序逻辑,基本的 operators(+, -, *, /, add, contains, iterator 这种)、primitives(int, long, short)、markers([], *, ref, parametric polymorphic…
This media is not supported in your browser
VIEW IN TELEGRAM
#statement #TeX 顺便说一下,其实 #Microsoft Office Word 系列排版也很好的,TeX 某些扩展包可能排起来都有数学公式渲染问题,我上次那个
foo.pdf 的根号就不对
duangsuse::Echo
加油! #life #dev
(吐槽,即使在与理论系的巨佬们差距如此之大的情况下也要如此逞强吗?
(回复,巨佬尽管是巨佬,可能几年前也不过是菜鸡,我和巨佬之间... 还差几年的努力
(回复,巨佬尽管是巨佬,可能几年前也不过是菜鸡,我和巨佬之间... 还差几年的努力
Hinnka Zhou
有点不太理解这段代码,什么情况下泛型会被擦除,什么情况不会?
#PL #Java 哦,又想起这件事,这个 Java 8 OpenJDK/Oracle JDK 的泛型(Generics aka. Parametric Polymorphism 也即参型多态)实现的确是基于擦除法实现的,换句话说泛型在 Java 8 里就只是提供
当然泛型这个不难理解,就拿
然后如果我们放
C++ 就是
高级一点的话就必须得学习泛型的 variance (型变性,说白了就是填的泛型参数和 subtype (子类型)之间的关系) @imKiva 那有一篇博文,推荐阅读,当然我不直接给链接(跑)
当然因为 Java 的泛型是虚泛型所以也会有一些诸如语言和字节码层面方法重载(overloading)的问题什么的,比较麻烦,JVM 的书可能都会讲关于虚泛型的事情
据说有些 JVM 开发者是持极端反对虚泛型(就是擦除法实现的泛型)的态度的(比如,吐槽性能不如 CLI 系的真实泛型好),目前 Kotlin 的
Wiki: Java 的泛型特性
自动类型转换和类型检查的语法糖,运行时 checkcast 还是照样得检查类型(也可能不用,因为类型系统确保了 interface Map<K, V> 的 V get(K) 方法返回的肯定是 V 类型的值,因为 void put(K, V) 方法有类型限制,所以拿到的肯定是符合限制的对象,静态强类型系统设计的一个很突出的特点就是可以完成执行效率的优化,消除不需要的类型检查),包括 18 年的 Oracle HotSpot(目前『官方』 JDK 的默认虚拟机) 25.x 和 Dalvik 1.1 (Android 上 Java 应用的运行时,当然不是 JVM,这里用作对比)都没有真泛型支持,虚拟机上基本可以说是没做什么改动,Dalvik 这清奇平台我不熟悉(我目前不常接触 Android 开发,实际上我工程的时候都很少很少很少,当然我不是不能学),HotSpot/JRockit/J9 之类的是随着新的 JVM 标准改了,就是 JVM 们支持 Signatures classField (ObjectWeb.ASM Parser) 部分,反射用的元数据也是从那拿到的(Java 1.8 之后大概 Sun javac 是会保存元数据的(可以拿 javap <className> 指令查看类元数据),显而易见地),这位老哥可能是对泛型擦除这个术语产生了误会(原意就是字面意思,编译完成后泛型被『擦除』了,在那部分字节码里不存在,也即和没有使用泛型的字节码一样),当然我后面也说了。当然泛型这个不难理解,就拿
List<T> 说,比如我们有 LinkedList (我不理论系,所以不懂 CoinductiveList 这些东西,也不知道啥是规约...)(破真)data class LinkedList(val obj: Any?, val next: LinkedList?)显然我们可以给这个对象添加一堆操作比如
T get(int)、void set(int, T) 什么的然后如果我们放
String,结果 get() 返回的是 Any,就得强制暴力转换(as String),非常的不爽,这时可以理解为 LinkedList<*, *>
这样又 checked 又可以避免强制转型,多好C++ 就是
template<typename T, typename R> (这里 template 和前端的模板差不多,自动生成代码的意思)实现的泛型,当然 C++ 比 C 多少还是高级很多(高级一点的话就必须得学习泛型的 variance (型变性,说白了就是填的泛型参数和 subtype (子类型)之间的关系) @imKiva 那有一篇博文,推荐阅读,当然我不直接给链接(跑)
当然因为 Java 的泛型是虚泛型所以也会有一些诸如语言和字节码层面方法重载(overloading)的问题什么的,比较麻烦,JVM 的书可能都会讲关于虚泛型的事情
据说有些 JVM 开发者是持极端反对虚泛型(就是擦除法实现的泛型)的态度的(比如,吐槽性能不如 CLI 系的真实泛型好),目前 Kotlin 的
inline reified generics 特性好像是给了 JVM 应用们一个『方法反射真泛型』的机会,当然我后面也有举例子(当然也可以利用 companion object 的 operator invoke() 伪造类 constructor 的真泛型,这个小 hack 当然是从 ice1k 的博客上看到的,某次成都线下 Kotlin 同好讨论会 )Wiki: Java 的泛型特性
TypeArguments:
< TypeArgument {TypeArgument} >
TypeArgument:
[WildcardIndicator] ReferenceTypeSignature
*
GitHub
unofficial-openjdk/openjdk
Do not send pull requests! Automated Git clone of various OpenJDK branches - unofficial-openjdk/openjdk
duangsuse::Echo
优化版的盒子堆(Haskell)(因为 InScript 还没有形式化的被定义出来,也暂时没有人实现它,我想看到自己的程序实打实在电子计算机而不是我的脑子里运行起来 XD): 😸 其实这玩意是我从《算法图解》(内容简单像「故事书」,其实教的东西大学里都要上,体现了知识系统相同表达教学方式简单一点的确可以让学习更高效)里弄的一个伪代码例子 可出对应 OI 题,不过就是那种小学生都会写的那种(迫真),好吧,我不知道现在 OI 生们都是啥水平,有没有 OI 生给我科普一下?排序算法理解否?各种图各种树算法会否?动态规划…
这只是递归下去了... 压根没有回溯回来,我当时设计的是想要副作用打印路径的说,要回溯的话得传当前路径,设计返回值
好像的确回溯了... 但是层次做的不对没有考虑到...
好像的确回溯了... 但是层次做的不对没有考虑到...