Amiriox's Storage

Declaration does not declare anything.

amiriox@terminal: ~/journey
$ whoami > /dev/null # RSS: /atom.xml ## Tutorial TLDR 下划以查看博客文章 $ tldr amiriox 折鸦/折鸦夜明け前/無暝; Amiriox Makinohara > 极端社恐, 线上线下基本上是两个人, 但欢迎聊天/交换友链 > 计算机科学狂热爱好者, OS/C++/Rust, Vim 党 $ vim ~/anime.rs const anime_arr: [anime; 10] = [末日三问, 虚构推理, 魔女之旅, 四叠半, 浪客剑心, 葬送的芙莉莲, 我心危, 比翼之吻, 孤独摇滚, GBC]; -- INSERT -- 1, 1 All # cat ~/hobbies.md * 游戏: 空洞骑士/只狼:影逝二度/怪物猎人/赛博朋克2077/明日方舟/丝之歌.unwrap() * 听音乐: * J-POP: 可惜夜/夜鹿/majiko/Reol/Aimer/花谱/结束乐队( * Vocaloid: 洛天依/诗岸/星尘Infinity * R&B: 陶喆/王力宏 * 正在培养的爱好: 板绘/像素画/摄影/文学 ## 不断 refactor 的灵魂 $ objdump -s -j .rodata /usr/bin/amiriox_soul | grep -oP '\s\K[^\0]*' 0x00401000 保持必要的力量与清醒, 去努力维持您自己的宁静与尊严 0x0040104C 水利万物而不争,故万物莫能与之争 0x0040107B He who has a why to live can bear almost any how.

整数的运算(第二章 Part2)

无符号数加法溢出

无符号的数的加法溢出规则很简单, 单纯截取后 \(w\) 位, 或称对 \(2^w\) 取模。因此:

\[ x\ +_w^u\ y = \begin{cases} x + y, & x + y < 2^w, \\ x + y - 2^w, & 2^w \leq x + y < 2^{w+1}. \end{cases} \]

(\(+_w^u\) 表示最多 \(w\) 位下的二进制无符号数加法。下文\(+_w^t\)\(w\) 位补码加法)

检验无符号数加法溢出

\(s = x +_w^u y\), 当且仅当 \(s < x\) (或等价地 \(s < y\)) 时发生溢出。

(当然, 默认 \(x\)\(y\) 本身不会溢出, 即在 \([0, UMax_w]\) 的范围内)

原理易证, 分别证明充分性必要性即可, 注意利用以上公式

阅读全文 »

整数的表示(第二章 Part1)

博客还没装 Mathjax 插件,所以下面的 \(\LaTeX\) 应该都是乱的 已修

整数表示

这一段如果没有目的和顺序地硬看会觉得关系很多很复杂,但其实只要按照一定的目的和顺序结构就会很清晰。

以设计者的视角思考如何设计

如果我们是设计用二进制表示整数的人,我们需要如何表示二进制?

利用 \(w\) 位二进制的最高位 $ x_{w-1} $ 为 \(1\) 代表这个数是负数,剩下的部分正常用二进制表示即 \(\displaystyle\sum_{i=0}^{w-2}x_i\cdot2^i\)

但显然光表示是完全不够的,我们还需要运算,而符号位由于不对具体数值做贡献,会导致运算错误。 因此我们需要让符号位也代表数值,用另一种映射方式计算,于是我们令最高位的符号位具有负的权重 \(-x_{w-1} \cdot 2^{w-1}\),这样符号位也参与了计算。但是这样数值又对不上了,因此我们需要把后面的位也变一下。由于我们不是真的设计师,所以我们直接看答案:取反后面的每一位后再 +1。例如10010除符号位取反后变为11101, +1后是11110。这样的表示方法计算出的数值是 \(-x_{w-1}\cdot2^{w-1}+\displaystyle\sum_{i=0}^{w-2}x_i\cdot2^i\) 如何论证这样的数值是”对”的呢?

阅读全文 »

Phase 0x1

一个练手的,要求通过缓冲区栈溢出攻击来调用 touch1

gdb ctarget 然后 set args -q 防止与不存在的服务器通信(run -q 也可以) b Gets run -q

看一下栈信息:

1
2
3
4
5
6
7
────────────────────────[ STACK ]────────────────────────
00:0000│ rsp 0x5561dc70 —▸ 0x4017b4 (getbuf+12) ◂— movl $1, %eax
01:0008│ rdi 0x5561dc78 ◂— 0
... ↓ 3 skipped
05:0028│ 0x5561dc98 —▸ 0x55586000 ◂— 0
06:0030│ 0x5561dca0 —▸ 0x401976 (test+14) ◂— movl %eax, %edx
07:0038│ 0x5561dca8 —▸ 0x55685fe8 —▸ 0x402fa5 ◂— pushq $0x3a6971 /* 'hqi:' */
阅读全文 »

这是我第一个完成的 lab, 这篇博客其实是边做边记的解决过程改的, 所以比较简略, 其他 Lab 的记录博客会详细一点, 这篇博客以后有时间也会补充

Phase 0x1

Border relations with Canada have never been better. 根据调用约定, gdb 直接读 phase_1()$rdi 即可.

Phase 0x2

1 2 4 8 16 32 利用断点跳到 read_six_number 后, 发现核心代码 add %eax %eax, 即不断 \(\times 2\)

Phase 0x3

5 206 rsp+8, rsp+12 分别是输入的两个数, int 占四字节.

发现一堆 mov, jmp, 里只有第五个的差能整除 \(8\) 并且 mov 过去的值是 206

(最后几行是核心代码 cmp 0xc(%rsp), %eax)

阅读全文 »

此文章的 撰写时间 可能有误

upd 2024-10-02 22:56:57
第一次用感觉还行,后来高三又从win换回opensuse,感觉挺垃圾的
今天太晚了等明天把我那篇批判的文章迁移过来

更换到了openSUSE


一直在考虑是否要换个linux玩玩。 自从10月1日(其实是10月2日凌晨)装好了manjaro 我就没停过折腾这玩意。

阅读全文 »

此文章的 撰写时间 可能有误

CSAPP Today 2021-01-18

一 左移和右移

对于x<<k称为将 \(x\) 左移 \(k\) 位。 对于一个位向量表示为 \([x_{w-1}, x_{w-2}, ..., x_0]\) 的操作数 \(x\), x<<k的结果是$ [x_{w-k-1}, x_{w-k-2}, …, x_0, 0, …, 0] $ 也就是向左移动 \(k\) 位, 右侧空缺用0补齐。 在C中,左移运算符从左至右结合。即x<<i<<j相当于(x<<j)<<k

对于x>>k成为将 \(x\) 右移 \(k\) 位。 不同的是,右移有两种形势,算术右移和逻辑右移

阅读全文 »

此文章的 撰写时间 可能有误

2020对我来说是极其重要的一年, 堪比2018年

一 简述

这一年乱七八糟的 想起来似乎没有记忆却又全是记忆

由于疫情的原因 这一年变得很奇怪

我的很多心理问题 从2019年的导火线开始 到网课期间完全引爆

那时的恐怖 黑暗和痛苦我至今想起来还如同窒息

当然 这一年也有感动, 进步, 创造, 成就…

那些收获将和痛苦一起 伴随着我前进 成为我最宝贵的人生财富

虽有黑色却又五彩缤纷的人生 总比一张白纸要好的多吧

写这个的主要原因是现在2020快结束了(元旦就放寒假了 因为COVID-19的关系)

加上看到了很多人的年终总结 (OIer的 V站程序员的 一起其他一些朋友的)

阅读全文 »
0%