首页
社区
课程
招聘
[求助]請教關於SSSE3 指令集操作碼問題
发表于: 2015-1-30 19:49 5345

[求助]請教關於SSSE3 指令集操作碼問題

2015-1-30 19:49
5345
例如:

SSSE3 指令 pshufb 128bit

代碼為

66 0f 38 00 01

byte1 66 表示是 128 bit xmm 如果前綴沒有66就是64 bit mm
byte2+3 0f 38 是 操作碼

我有疑問的是第5個字節 01 這個是Modrm嗎

我嘗試在IDA Pro 下更改 會有4種模式

操作代碼會變成

Modrm 0x00-0x3F

66 0f 38 00 00
pshufb  xmm0, xmmword ptr [rax]

Modrm  0x40-0x7F

66 0F 38 00 40 01
pshufb  xmm0, xmmword ptr [rax+1]

Modrm  0x80-0xBF

66 0F 38 00 80 01 02 03 04
pshufb  xmm0, xmmword ptr [rax+4030201h]

Modrm 0xc0-0xff

66 0F 38 00 C0
pshufb  xmm0, xmm0

以上4個模式是代表Modrm的尋址模式嗎 專業名詞是什麼

128bit跟64bit 一樣都使用這4個模式嗎

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
0F 38 是三字节前缀,也叫逃逸码。00 才是Opcode,
那个modrm 分成三部份 mod部份占两bit正好最大模式就是4,再具体的,你看下intel手册的modr/m那个表。
再补充一点,别迷信什么专业名词,这个东西以intel的手册为准就可以了,x86本身就是intel的产物,叫法上,国内翻译过来的汇编语言应该说都是作者自己体会的,对错暂放一边,就理解来讲,纯英文的东西还是比较正统的。

再回答一个问题 01不是modrm 40是modrm 01是displace
建议楼主仔细看完手册,这些问题迎刃而解。
2015-1-31 03:35
0
雪    币: 320
活跃值: (104)
能力值: (RANK:180 )
在线值:
发帖
回帖
粉丝
3
intel的手册 蠻複雜的 我有看了 那個表有空再研究吧...

所以opcode 後面那一個byte 就是 modrm byte 就是了

但是我用IDA Pro 看 他只有1個byte的大小 0x00 - 0xff

英文版還要翻譯 才看得懂 我目前理解的是

0x00 - 0x3f 是 mod 00
0x40 - 0x7f 是 mod 01
0x80 - 0xbf 是 mod 10
0xc0 - 0xff  是 mod 11

我現在只想研究SSSE3 部分 全部參在一起看我會亂掉

現在想知道的是

SSSE3 m128 跟 m64 都會有 mod 這4種尋址方式的模式嗎

暫存器 8-15 不是m128才有在用

在modrm byte 那個字節範圍是m128 用的xmm 8 - xmm15

THX
2015-1-31 16:38
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
0x00 - 0x3f 是 mod 00
0x40 - 0x7f 是 mod 01
0x80 - 0xbf 是 mod 10
0xc0 - 0xff  是 mod 11
这块理解没问题,操作度宽和寻址没关系,寻址就是四种,永远是四种。
128位的问题,你还要理解x86和vax是怎么转换的,x86下,128位,只能用到xmm7,只有到vax才能用xmm8以上。强烈建议你仔细看手册,哪怕英文有困难也要耐心。翻译的东西基本上都会有一些错误。而且这些错误,是intel天然bug的,连作者自己也不知道。
另外说实话,那个表还是挺清晰。咋会复杂呢?
另外sse3是个指令集,不能单独看,必须要结合x86看,x86就像打怪的第一层sse3大概在第四层
2015-1-31 18:09
0
游客
登录 | 注册 方可回帖
返回
//