IN Blog

Thinking will not overcome fear but action will.

深入理解计算机系统 学习笔记(6)

Hello world,hello blog!

链接 符号解析: 原则是:编译器只允许每个模块中每个本地符号只有一个定义。而且对全局的符号的解析很棘手,因为多个目标文件可能会定义相同的符号。C++和Java使用mangling手段来支持重载。 根据Unix连接器使用下面的规则来处理多重定义的符号: 规则1:不允许有多个强符号。 规则2:如果有一个强符号和多个弱符号,那么选...

深入理解计算机系统 学习笔记(5)

Hello world,hello blog!

链接 编译驱动程序:大多数编译系统提供编译驱动程序,它代表用户在需要的时候调用语言预处理、编译器、汇编器、和链接器。 目标文件 目标文件有三种:可重定位目标文件、可执行目标文件和共享目标文件(即动态链接库),个个系统上对目标文件的叫法不一致,Unix叫a.out,Windows NT叫PE(Portable Executable)。现代Unix使用ELF格式(...

深入理解计算机系统 学习笔记(4)

Hello world,hello blog!

内存和高速缓存的原理 core i7的高速缓存层次结构:只保存指令的高速缓存i-cache,只保存数据的高速缓存叫d-cache。既保存指令又保存数据的成为统一的高速缓存。 像第一章说的那样高速缓存至关重要,特别是“缓冲区命中”这个技术如果优化好了,速度将会很大改进。下图为高速缓存的物理逻辑图: 直接映射高速缓存 根据E(高速缓存行)高速缓存被分...

深入理解计算机系统 学习笔记(3)

Hello world,hello blog!

内存和高速缓存的原理 之前知识停留在RAM和ROM,现在再往前推进一步RAM也分为静态SRAM和动态的DRAM。SRAM主要用于高速缓存DRAM用于内存 SRAM将每个位存储在一个双稳态的存储器单元里。每个单元是用一个六个晶体管电路来实现。它可以无限期地保持在两个不同的电压配置或状态之一。就是说只要有电,他就会永远地保持它的值。即使有干扰,例如电子噪音、扰乱电压,当干扰消除...

深入理解计算机系统 学习笔记(2)

Hello world,hello blog!

深入理解计算机系统 学习笔记(2) 函数调用实例 int swap_add(int* xp,int* yp); int caller() { int arg1 = 534; int arg2 = 1057; int sum = swap_add(&arg1 , &arg2); int diff = arg1 - arg2; ...

深入理解计算机系统 学习笔记(1)

Hello world,hello blog!

程序的机器级表示 汇编代码不区分有符号和无符号甚至指针类型。 汇编代码后缀的含义 大多数GCC生成的汇编指令都有一个字符后缀,表示操作数的大小。例如数据传送指令有三个变种:movb(传送字节)、movw(传送字)和movl(传送双字)。注意,汇编代码使用后缀’l’来表示4个字节整数和8个字节双精度浮点数,这不会产生歧义,因为浮点数使用的是...

关于二进制学习的一些感悟

Hello world,hello blog!

前言 近二十天以来,一直在忙活毕业论文和设计的事,今天终于将这件事大概完成了,后续应该有更多的时间投入到二进制的学习中。今天忙着将论文初稿结束,所以没有花很多时间在二进制的学习上。 一些有关二进制小感悟 前面很长一段时间都在进行汇编语言的学习,发现在做反汇编还是有很大的吃力,于是在论坛上找了不少关于逆向工程的帖子看,发现自己走入了一个弯道。 对于汇编语言,学到够用就可以了,能达到语句...

Reverse Sign In

Hello world,hello blog!

今天继续reverse中的Reverse Sign In。 先使用斯托夫文件格式分析器分析出该文件为ELF文件 然后使用IDA打开该文件,直接定位到主函数部分 按F5键进入伪代码部分,并分析出有一个sub_400686函数决定了Flag的对错,所以对这个函数进行分析 该函数的主体为if语句,主要含义为:如果形参a1中每个字符异或byte_400818[i]中的字符...

HelloWorld反汇编分析

Hello world,hello blog!

学习目的 由于第三阶段的测试中需要对未知的指令集进行分析,,故今天简单尝试了对HelloWorld.c程序进行分析。 学习过程 HelloWorld程序源代码: #include <stdio.h> int main(int argc, char *argv[]) { printf("Hello world!"); return 0; } 下面是使用反汇编工具得...

RSA2(2)

Hello world,hello blog!

解题过程 昨天解出密钥的一些特定值,如q、p、n、e、d,所以只需要使用这些要素将对应的私钥求出即可。 本来想使用Python脚本来输出私钥,但是脚本一直出错,我也不清楚哪里出了错误,这里给出脚本作为参考。 import sys import math from Crypto.PublicKey import RSA keypair = RSA.generate(1024) keyp...