1.0.0 Summary

Tittle:【Assembly】-NO.88.Assembly.2.滴水逆向.1.002-【】-

Style:Java

Series:Log4j

Since:2018-02-09

End:2018-02-09

Total Hours:30+

Degree Of Diffculty:5

Degree Of Mastery:5

Practical Level:5

Desired Goal:5

Archieve Goal:3

Gerneral Evaluation:3

Writer:kingdelee

Related Links:

http://www.cnblogs.com/kingdelee/

1.进制的理解

3进制:

7进制:

2.进制的转换

2.1

 

八进制 +-*/
1.加法----------------------------------
277
+ 333
-----------------
7+3:12 ------进1,留2
-----------------
7+3+1:13 ------加上前一个进1计算,仍旧进1,留3
-----------------
2+3+1:6 ------留6
-----------------
632 ------以上留位拼接 2.减法----------------------------------
236
- 54
-----------------
6-4:2 ------留2
-----------------
3-5:6 ------借1位,即3+8=11,11-5=6,留6
-----------------
2-1:1 ------被借1,即2-1=1.
-----------------
162 ------结果 3.乘法----------------------------------
276
* 54
-----------------
6*4=30 ------6+6=14+6=22+6=30,进3留0; 另一种算法:10:6*4=24, 24/8=3, 24+(24/8)*(10-8)=30;6+6=14+6=22+6=30
-----------------
4*7+3=37 ------7+7=16+7=25+7=34,34+3=37,进3留7
-----------------
4*2+3=15 ------4+4=10,10+3=13, 进1留3
-----------------
1370 到276*5了;
-----------------
6*5=36 -------6+6=14+6=22+6=30+6=36
-----------------
7*5+3=46 -------7+7=16+7=25+7=34+7=43,43+3=46
-----------------
5*2+4=16 -------5+5=12+4=16
-----------------
1666 1370
+ 1666
-----------------
0
-----------------
6+7=15
-----------------
3+6+1=12
-----------------
1+6+1=10
-----------------
1+1=2
-----------------
20250 4.除法----------------------------------
234
/ 4
-----------------
反推:4+4=10+4=14+4=20, x=20<23<20+4=24,所以 得4余3
-----------------
反推:20+4=24+4=30+4=34 所以,得7整除
-----------------
47
-----------------

  

3.16进制是2进制的简写形式

从0写到1111

EE,BE,96即

1111 1111,1011 1111, 1001 0110

4.计算机宽度

5.无符号数

6.有符号数

有符号数,为正数时,和无符号数规则一样

为负数时,

假设数据宽度为1 byte(8 bit)

假设数据宽度为 Doubleword(32Bit)

计算机是通过位运算实现 所有计算

4+5 的运算过程 -----------------------------	

		0000 0100
0000 0101
+ ---------
0000 1001 ----------------------------- 1)先得到异或结果,临时性的
0000 0100 ---------# 1.1
0000 0101 ---------# 1.2
异或 ---------
0000 0001 ---------# 1.3 2)再通过与运算 判断是否有进位
如果没有进位的情况下,异或的结果与加的结果一样
如果有进位,拿异或的结果与与的结果继续 异或 0000 0100
0000 0101
与 ---------
0000 0100 ---------# 1.4 有1应进位:
0000 1000 ---------#1.4 -> #1.5 结果 存在1不全是0,说明有进位
拿此结果与异或的结果相加 3)继续异或
拿异或的结果和与的结果 继续异或 0000 0001 --------- $ 1.3
0000 1000 --------- $ 1.5
异或 ---------
0000 1001 4) 判断3)的与 是否有进位 0000 0001 --------- $ 1.3
0000 1000 --------- $ 1.5
与 ---------
0000 0000 结果 全是0,没有进位。
则异或的结果就是按位加的最终结果 4-5 的运算过程 ----------------------------- 即 4+(-5) -5:
原码:1000 0101
反码:1111 1010
补码:1111 1011
用补码进行计算 1) 0000 0100
1111 1011
异或 ---------
1111 1111 2)
0000 0100
1111 1011
与 ---------
0000 0000 没有进位,异或的结果就是按位加的结果 即 4+(-5) 结果 16进制:FF,10进制 -1, 2进制:1111 1111
----------------------------- x*y 乘法的本质 就是y个x相加
x/y 除法的本质 就是x能减去?个y -------------------------------------------------------------------

  

ollydbg:

反汇编窗口-寄存器

内存窗口-堆栈

--------------------------------------------------------------

寄存器

mov 指令

mov eax,1

mov ebx,1

1.立即数到内存

mov byte ptr ds:[内存地址], 1

mov指令:
1.立即数到内存
2.寄存器到内存
3.内存到寄存器 1.立即数到内存
mov byte ptr ds : [0019FF99], 0x12
mov word ptr ds : [0019FF99], 0x1234
mov dword ptr ds : [0019FF99], 0x12345678 2.寄存器到内存
mov dword ptr ds : [0019FF99], EAX
mov word ptr ds : [0019FF99], AX
mov byte ptr ds : [0019FF99], AL 3.内存到寄存器
mov eax, dword ptr ds : [0019FF99] tip:每个编号对应的是一个字节 读取内存的值
mov eax, dword ptr ds: [0019FF99] 向内存中写入数据
mov dword ptr ds:[0019FF99], eax 内存地址的5种表示形式:
1. [0x13FFC4]
2. [EAX]
mov dword ptr ds : [EAX], 0x12345678
3. [reg + 立即数]
读取内存的值:
mov ecx, 0x13FFD0
mov eax, dword ptr ds:[ecx + 4] 向内存中写入数据:
mov edx, 0x13FFD8
mov dword ptr ds:[edx+0xC], 0x87654321
4. [reg + reg*{1,2,4,8}]
读取内存的值
mov eax, 13FFC4
mov ecx, 2
mov edx, dword ptr ds:[eax + ecx * 4] 向内存中写入数据:
mov eax, 13FFC4
mov ecx, 2
mov dword ptr ds:[eax + ecx*4], 87654321 5. [reg + reg*{1,2,4,8} + 立即数]
读取内存的值
mov eax, 13FFC4
mov ecx, 2
mov edx, dword ptr ds:[EAX + ECX*4 + 4] 向内存中写入数据:
mov eax, 13FFC4
mov ecx, 2
mov dword ptr ds:[eax + ecx*4 + 4], 87654321

 

存储模式

 

查看内存地址

db 内存地址,一个字节

dw 内存地址,看两个字节

dd 内存地址,四个字节看

add eax, ecx

【Assembly】-NO.88.Assembly.2.滴水逆向.1.002-【位运算及基础指令】-的更多相关文章

  1. 【Linux】-NO.87.Assembly.1.滴水逆向.1.001-【介绍】-

    1.0.0 Summary Tittle:[Linux]-NO.87.Assembly.1.滴水逆向.1.001-[基础]- Style:Java Series:Log4j Since:2017-04 ...

  2. 慎用Assembly.LoadFile()和Assembly.LoadFrom()

    经测这俩方法会锁住文件,导致程序运行期间无法对load过的程序集文件进行更名/删除/覆盖等等操作,考虑用Assembly.Load()文件字节组替代: Assembly.Load(File.ReadA ...

  3. 使用InternalsVisibleTo给assembly添加“友元assembly”

    C#的internal关键字可以使标记的方法,字段或者属性等等只能在当前assembly内部使用,那么如果其他的assembly需要使用这个internal的方法的时候怎么办呢?.NET提供了一种类似 ...

  4. 使用InternalsVisibleToAttribute给assembly添加“友元assembly”特性遭遇"强签名"

    一.如何让Intenal成员暴露给另一个程序集 我们知道Modifier为Internal的类型成员仅限于当前程序集能够访问,但是在某些情况下,我们希望将它们暴露给另一个程序集.比较典型的应用场景包括 ...

  5. .NET:Assembly.CodeBase vs. Assembly.Location

    The CodeBase is a URL to the place where the file was found, while the Location is the path from whe ...

  6. 配置到 Framework GAC(Global Assembly Cache) Assembly

    配置到 Framework 通常有两种方法,一种是直接把它放到GAC(Global Assembly Cache作用是可以存放一些有很多程序都要用到的公共Assembly)中 :另一种是把它们放到具体 ...

  7. 关于Assembly.LoadFrom和Assembly.LoadFile的区别

    区别: 1.Assembly.LoadFile只载入相应的dll文件,比如Assembly.LoadFile("a.dll"),则载入a.dll,假如a.dll中引用了b.dll的 ...

  8. 滴水逆向初级-C语言(二)

    2.1.C语言的汇编表示 c语言代码 int plus(int x,int y) { return 0; } void main() { __asm { mov eax,eax } //调用函数 pl ...

  9. iOS逆向开发(1):基础工具 | ssh | scp | socat

    小白:小程,我一直想问,什么是逆向来着?是逆向行驶吗? 小程:理解为逆向行驶也没错.一般的项目是从无到有,而逆向是从已有的状态入手,分析出已有的流程与结构的手段. iOS上的逆向开发,是一件有趣的事情 ...

随机推荐

  1. 【Spark深入学习 -12】Spark程序设计与企业级应用案例02

    ----本节内容------- 1.遗留问题答疑 1.1 典型问题解答 1.2 知识点回顾 2.Spark编程基础 2.1 Spark开发四部曲 2.2 RDD典型实例 2.3 非RDD典型实例 3. ...

  2. Js 跳出两级循环的方法

    做过一个复杂的验证方法,需要两层each验证之后反正报错的信息.因为双重循环的问题,纠结了很久. /** * 验证input 的值 是否输入 flg:验证成功 false:验证失败 */ functi ...

  3. 分布式Id教程

    转自:https://baijiahao.baidu.com/s?id=1584913615817222458&wfr=spider&for=pc 一,题记 所有的业务系统,都有生成I ...

  4. 一对一voip,直播连麦,在线会议,兼容webrtc,IM音视频

    功能 IM消息系统 一对一 高清音视频实时通信,可无缝切换P2P传输,节省服务器带宽 一对多互动直播 多对多在线会议 手机实时录屏传输 高度定制化 网络检测,动态码率与动态帧率,抗网络抖动,微信级效果 ...

  5. db2 执行计划

    SQL 语句优化贯穿于数据库类应用程序的整个生命周期,包括前期程序开发,产品测试以及后期生产维护.针对于不同类型的 SQL 性能问题有不同的优化方法.索引对于改善数据库 SQL 查询操作性能至关重要, ...

  6. KMP,深入讲解next数组的求解(转载)

    前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k:但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导 ...

  7. BCP文件导入SQLServer数据库遇到的问题

    1. BCP文件插入sql server数据库,未指定数据库字段类型情况下,需要每个字段单独指定字段长度 2.文件中的存储值得类型 3.设置最大的类型

  8. 同时使用Union和Order by问题(ORA-00933错误)解决

    之前,同事在编写视图的过程中遇到这样了这个错误.我把简化后的语句整理如下: 1: select 2: '2016' as nf, 3: qxdm, 4: round(sum(tbdlmj)/10000 ...

  9. Oracle 行列转置

    两种简单的行列转置 1.固定列数的行列转换如student   subject    grade--------- ---------- --------student1  语文       80st ...

  10. spring学习笔记-AOP

    1.aop:aspect oriented programming 面向切面编程 2.aop在spring中的作用:   提供声明式服务(声明式事务) 允许用户实现自定义切面 3.aop:在不改变原有 ...