标签: opcode

如何在gcc中获得完整的汇编程序输出?

我知道我可以使用以下命令获取编译器生成的汇编代码:

gcc -S ...
Run Code Online (Sandbox Code Playgroud)

即使这令人烦恼也没有给我一个目标文件作为过程的一部分.

但是,如何获得编译代码的所有内容?我的意思是地址,生成的字节等等.

输出的指令gcc -S不告诉我有关指令长度或编码的任何信息,这是我想要看到的.

assembly gcc opcode

6
推荐指数
1
解决办法
6550
查看次数

Perl - 操作码的操作码?

有没有办法创建perl源代码,如果我有操作码?

例如

perl -MO=Concise -e "print 123"
Run Code Online (Sandbox Code Playgroud)

将输出操作码:

6  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 1 -e:1) v:{ ->3
5     <@> print vK ->6
3        <0> pushmark s ->4
4        <$> const[IV 123] s ->5
Run Code Online (Sandbox Code Playgroud)

我想以某种方式扭转这种局面.

perl reversing opcode

6
推荐指数
1
解决办法
377
查看次数

动态对象属性populator(无反射)

我想以类似于CodeProject上的DynamicBuilder的方式填充对象的属性而不使用反射.CodeProject示例是为使用DataReader或DataRecord填充实体而定制的.我在几个DAL中使用它以达到很好的效果.现在我想修改它以使用字典或其他数据不可知对象,以便我可以在非DAL代码中使用它 - 我目前使用反射.我对OpCodes和IL几乎一无所知.我只知道它运作良好,比反射更快.

我试图修改CodeProject示例,由于我对IL的无知,我已经陷入两行.

  • 其中一个处理dbnulls,我很确定我可以丢失它,但我不知道它之前和之后的行是否相关,以及它们中的哪一个也需要去.
  • 另一方面,我认为,是之前将价值从数据线中拉出来的,现在需要将其从字典中拉出来.我想我可以用"property.Value"替换"getValueMethod",但我不确定.

我也愿意采用替代/更好的方法来遮盖这只猫.

这是迄今为止的代码(注释掉的行是我坚持的行):

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Reflection.Emit;

public class Populator<T>
{
    private delegate T Load(Dictionary<string, object> properties);
    private Load _handler;
    private Populator() { }
    public T Build(Dictionary<string, object> properties)
    {
        return _handler(properties);
    }
    public static Populator<T> CreateBuilder(Dictionary<string, object> properties)
    {
        //private static readonly MethodInfo getValueMethod = typeof(IDataRecord).GetMethod("get_Item", new [] { typeof(int) });
        //private static readonly MethodInfo isDBNullMethod = typeof(IDataRecord).GetMethod("IsDBNull", new [] { typeof(int) });
        Populator<T> dynamicBuilder = …
Run Code Online (Sandbox Code Playgroud)

c# ilgenerator opcode

5
推荐指数
1
解决办法
6975
查看次数

3操作数imul指令究竟在ia-32汇编中做了什么?

我正在读指令

imul 0xffffffd4(%ebp, %ebx, 4), %eax
Run Code Online (Sandbox Code Playgroud)

而且我对它正在做的事情感到困惑.我明白imul会增加,但我无法弄清楚语法.

x86 assembly instruction-set opcode

5
推荐指数
2
解决办法
6018
查看次数

在C++中,关于位移和转换数据类型

我最近在Stack Overflow上问了一个关于如何将我的数据从16位整数后跟未定量的void*-cast内存转换为无符号字符的std :: vector的问题,以便使用已知的套接字库作为NetLink使用其签名如下所示的函数来发送原始数据:

void rawSend(const vector<unsigned char>* data);
Run Code Online (Sandbox Code Playgroud)

(供参考,这里是那个问题:将unsigned int +一个字符串转换为unsigned char向量)

这个问题得到了成功的回答,我很感谢那些回应的人.Mike DeSimone回复了一个send_message()函数示例,该函数将数据转换为NetLink接受的格式(std :: vector),如下所示:

void send_message(NLSocket* socket, uint16_t opcode, const void* rawData, size_t rawDataSize)
{
    vector<unsigned char> buffer;
    buffer.reserve(sizeof(uint16_t) + rawDataSize);
    buffer.push_back(opcode >> 8);
    buffer.push_back(opcode & 0xFF);
    const unsigned char* base(reinterpret_cast<const unsigned char*>(rawData));
    buffer.insert(buffer.end(), base, base + rawDataSize);
    socket->rawSend(&buffer);
}
Run Code Online (Sandbox Code Playgroud)

这看起来正是我所需要的,所以我开始编写一个附带的receive_message()函数......

...但是我很尴尬地说我并不完全理解所有的位移和诸如此类的东西,所以我在这里遇到了一堵墙.在我过去近十年编写的所有代码中,我的大部分代码都是使用更高级的语言,而我的其余代码并没有真正调用低级内存操作.

回到编写receive_message()函数的主题,我的起点,如您所想,是NetLink的rawRead()函数,其签名如下所示:

vector<unsigned char>* rawRead(unsigned bufferSize = DEFAULT_BUFFER_SIZE, string* hostFrom = NULL);
Run Code Online (Sandbox Code Playgroud)

看起来我的代码将开始这样的事情:

void receive_message(NLSocket* socket, uint16_t* opcode, const void** rawData)
{
    std::vector<unsigned char, …
Run Code Online (Sandbox Code Playgroud)

c++ sockets bit-manipulation opcode

5
推荐指数
1
解决办法
481
查看次数

图灵完整的字母数字x86指令集(子集)

我期待创建一个最小的,计算通用的字母数字x86操作码子集.最终我希望子集包含尽可能少的指令,如果有多个最小子集我也想知道.子集应该能够模拟可以用整套字母数字指令编写的任何程序.说明应仅涵盖与"AZ","az"和"0-9"字符对应的说明.

到目前为止,我认为一个push,pop,inc,dec,cmp,和je就足够了,但我敢肯定有一个较小的一套.我怎样才能证明我生成的集合能够使用所有字母数字指令模拟任何程序?我怎么能证明这样的一套是最小的?有谁知道这样的指令子集是否存在?

x86 alphanumeric opcode turing-complete

5
推荐指数
1
解决办法
840
查看次数

为什么ia32/x64操作码将文档0x66和0xF2映射为操作码0x0F38F1(CRC32)的双重必需前缀?

在英特尔64和IA-32架构软件开发人员手册中,行F表A-4附录A.3卷2C(订单号326018-045US 2013年1月)的独特之处在于它具有前缀子行,用于两个组合前缀:0x66和0xF2.

与此相关的唯一操作码是0x0F38F1(CRC32).对于前缀0xF2,源操作数是Ey(存储器或通用寄存器; 32位或64位),对于前缀0x66和0xF2,源操作数是Ew(存储器或通用寄存器;总是16位)

但是,如果0x66只是可选的操作数大小覆盖前缀而不是两个强制前缀的组合中的第一个,那么这些源操作数与它们将是相同的.实际上,作为可选前缀的0x66是第3.2章第2A卷中CRC32指令的记录(隐式地:16位和32位源操作数的相同字节序列).看起来该表可能省略了0x66和0xF2行,并将源操作数记录为0xF2行中的Ev(存储器或通用寄存器; 16位或32位或64位).

操作码映射是否有理由以这种独特的方式记录操作码0x0F38F1的源操作数?

编辑:增加了手册版本

x86 assembly x86-64 machine-code opcode

5
推荐指数
1
解决办法
790
查看次数

Cortex-M4操作码列表

我一直在寻找ARM Cortex M3/M4/M4F中使用的操作码列表,没有运气.


有很多[在线]参考32位格式的ARM指令.
对Thumb-2指令的引用很少,但可用.
在-M变种中使用的版本,但是,我找不到!

ARM技术参考手册有一个"程序员模型"部分,其中列出了指令,每个指令的周期......但没有实际代码.
我找到了一个"权威指南",它有同样的问题.

信息必须在某处 - 你需要它来编写编译器.
我应该在哪里看?

arm instruction-set opcode cortex-m

5
推荐指数
1
解决办法
2098
查看次数

简短说明有更好的表现吗?

我真的需要关心可以发出.s指令的地方吗?或者它只会影响尺寸,但真正的性能会是一样的吗?

生成的dll也将在AOT平台上使用.有.s和没有IL的结果AOT-ed dll是否相同?

我的意思是br.s,ldloca.s等.

c# il opcode aot

5
推荐指数
1
解决办法
185
查看次数

装配8086中的SAL/SAR与SHR/SAR

我正在学习汇编语言(特定于x86).我已经理解 SAL并且 SHL以类似的方式工作(清除lsb并将msb携带到CF)从这里开始在80x86中SHL和SAL之间的区别.

考虑到SHR并且SAR不以类似的方式操作(后者保持msb不变).

我想大概有一个明确的概念,为什么的功能移位算术右移 SAR定义不同右移 SHR,但在同一时间SHL ,并 SAL保持与类似的功能?

assembly opcode x86-16

5
推荐指数
1
解决办法
8569
查看次数