标签: opcode

从vc ++调用存储在堆中的代码

想象一下,我正在做这样的事情:

void *p = malloc (1000);
*((char*)p) = some_opcode;
*((char*)p+1) = another_opcode; // for the sake of the example: the opcodes are ok

....
etc...
Run Code Online (Sandbox Code Playgroud)

如何定义一个函数指针来调用p,好像它是一个函数?(我使用的是VC++ 2008 express).

谢谢

c++ assembly pointers function-pointers opcode

11
推荐指数
3
解决办法
1304
查看次数

为什么JSR/RET不推荐使用Java字节码?

有谁知道为什么在Java 6中不推荐使用JSR/RET字节码对?

我在网上发现的唯一有意义的解释是,他们通过运行时进行代码分析更难以执行.有谁知道另一个原因?

java jvm bytecode opcode deprecated

11
推荐指数
1
解决办法
2861
查看次数

什么是更快:JMP或NOP串?

我正在实现二进制转换,并且必须处理长度约为16个操作码的NOP序列(0x90).在这样的序列开始时将JMP放到最后(性能)是否更好?

assembly opcode

11
推荐指数
2
解决办法
2078
查看次数

如何获取ac程序的操作码

我知道如何使用gdb获取程序的汇编代码但是如何获取操作码?我需要它来破解Linux服务器(不要担心它是我所拥有的类的一部分所以没有真正的服务器会受到伤害).其实我正在阅读这篇文章,我想知道如何从汇编中获得:

[aleph1]$ gcc -o shellcodeasm -g -ggdb shellcodeasm.c
[aleph1]$ gdb shellcodeasm

(gdb) disassemble main
Dump of assembler code for function main:
0x8000130 <main>:       pushl  %ebp
0x8000131 <main+1>:     movl   %esp,%ebp
0x8000133 <main+3>:     jmp    0x800015f <main+47>
0x8000135 <main+5>:     popl   %esi
0x8000136 <main+6>:     movl   %esi,0x8(%esi)
0x8000139 <main+9>:     movb   $0x0,0x7(%esi)
0x800013d <main+13>:    movl   $0x0,0xc(%esi)
0x8000144 <main+20>:    movl   $0xb,%eax
0x8000149 <main+25>:    movl   %esi,%ebx
0x800014b <main+27>:    leal   0x8(%esi),%ecx
0x800014e <main+30>:    leal   0xc(%esi),%edx
0x8000151 <main+33>:    int    $0x80
0x8000153 <main+35>:    movl   $0x1,%eax
0x8000158 <main+40>:    movl   $0x0,%ebx …
Run Code Online (Sandbox Code Playgroud)

c linux x86 assembly opcode

11
推荐指数
3
解决办法
1万
查看次数

JVM中的非法操作码

我最近遇到了开发一个库,该库在JVM字节码上执行了一些操作码,在这些操作码上没有文档(我已经找到),但是JVM参考实现可以识别它们.我找到了这些列表,它们是:

BREAKPOINT = 202;
LDC_QUICK = 203;
LDC_W_QUICK = 204;
LDC2_W_QUICK = 205;
GETFIELD_QUICK = 206;
PUTFIELD_QUICK = 207;
GETFIELD2_QUICK = 208;
PUTFIELD2_QUICK = 209;
GETSTATIC_QUICK = 210;
PUTSTATIC_QUICK = 211;
GETSTATIC2_QUICK = 212;
PUTSTATIC2_QUICK = 213;
INVOKEVIRTUAL_QUICK = 214;
INVOKENONVIRTUAL_QUICK = 215;
INVOKESUPER_QUICK = 216;
INVOKESTATIC_QUICK = 217;
INVOKEINTERFACE_QUICK = 218;
INVOKEVIRTUALOBJECT_QUICK = 219;
NEW_QUICK = 221;
ANEWARRAY_QUICK = 222;
MULTIANEWARRAY_QUICK = 223;
CHECKCAST_QUICK = 224;
INSTANCEOF_QUICK = 225;
INVOKEVIRTUAL_QUICK_W = 226;
GETFIELD_QUICK_W = 227;
PUTFIELD_QUICK_W = 228;
IMPDEP1 …
Run Code Online (Sandbox Code Playgroud)

java jvm bytecode opcode

11
推荐指数
1
解决办法
1699
查看次数

Perl的安全是否了解新功能?

我正在玩安全模块以包含在Mastering Perl中.v5.16之前的版本(最早支持的版本)似乎不了解新的关键字.我错过了什么吗?

说适用于v5.16及更高版本

use v5.10;

use Safe;

say "Running $0 under $^V with Safe ", Safe->VERSION;

my $compartment = Safe->new;
$compartment->permit( ':base_io', ':load' );

my $code =<<"CODE";
use v5.10;
say "Hello Safe!";
CODE

$compartment->reval( $code ) or do {
        my $error = $@;
        warn "Safe compartment error! $@";
        };
Run Code Online (Sandbox Code Playgroud)

这个代码在v5.18和v5.16下运行,这是两个官方支持的Perl版本:

% perl5.18.0 safe.pl
Running safe.pl under v5.18.0 with Safe 2.35
Hello Safe!

% perl5.16.3 safe.pl
Running safe.pl under v5.16.3 with Safe 2.35
Hello Safe! …
Run Code Online (Sandbox Code Playgroud)

perl opcode

11
推荐指数
1
解决办法
381
查看次数

编写PHP操作码并执行它.怎么做?

如何编写PHP操作码,将其保存在文件中并使Zend Engine执行它?任何方法或黑客都是受欢迎的,只要它能够解决问题.

php opcode php-internals

10
推荐指数
1
解决办法
1853
查看次数

Erlang Opcodes及其含义

Erlang VM使用的一些操作码具有明显的含义,但其他操作码是神秘的,它们似乎因微妙的差异而彼此不同.

举个例子:

  1. call_extcall_ext_only操作码之间有什么区别?
  2. allocateallocate_zero操作码之间有什么区别?
  3. test_heap用于什么操作码?它是某种检查还是它实际上在堆中分配了一些空间?它以某种方式与元组和列表的使用相关联,但在哪些方面呢?
  4. 这些论点的allocate含义是什么?

如果有人能够指出任何可用于Erlang VM使用的操作码的文档,或者如果他至少可以在上述方面给我启发,那将非常感激.

erlang opcode opcodes

10
推荐指数
1
解决办法
1010
查看次数

JVM规范中JSR/RET的状态

JVM规范的某些部分建议操作JSR(Jump SubRoutine),JSR_W(Jump SubRoutine Wide)RET(从子例程返回)仅可用于类文件版本50.0(JDK 1.6):

3.13最后编译

(本节假设编译器生成版本号为50.0或更低版本的类文件,以便可以使用jsr指令.另请参见§4.10.2.5.)

然后:

4.10.2.5.例外和finally

要实现try- finallyconstruct,生成class版本号为50.0或更低版本的文件的Java编程语言的编译器可以使用异常处理工具和两个特殊指令:jsr("跳转到子例程")和ret("从子例程返回" ").

另一方面,操作码描述本身并未说明这些功能的弃用.引用的文本只说明过去50.0版本中的版本如何,但在此之后并没有明确说明事态.

这个评论(对于询问这种弃用或删除背后的动机的问题)表明了类似的混淆程度,所以显然我并不是唯一一个寻找此问题的人.

java jvm finally opcode jvm-bytecode

9
推荐指数
1
解决办法
738
查看次数

指令解码器如何在32位模式下区分EVEX前缀和BOUND操作码?

在32位模式下,英特尔通过反转寄存器扩展的高位来解决VEX前缀与LDS/LES冲突,因为ModRM字节的mod字段不能为11b

VEX前缀的初始字节值C4h和C5h与LDS和LES指令的操作码相同.64位模式不支持这些指令.为了在32位模式下解决模糊性,VEX的规范利用了合法的LDS或LES的ModRM字节不能是11xxxxxx(它将指定寄存器操作数)的事实.VEX前缀的第二个字节中的各个位字段被反转,以确保该字节在32位模式下始终为此形式.

https://en.wikipedia.org/wiki/VEX_prefix#Technical_description

但是在EVEX中,R和X位不反转,导致mod = 00b,这也表示BOUND指令中的内存操作数

来自REX前缀的四位R,X,B和W. W将操作数大小扩展为64位或作为附加操作码,R扩展reg,B扩展r/m或reg,X和B扩展索引和SIB字节中的基址.与VEX前缀相比,RXB以非反转形式提供,就像在REX前缀中一样.

https://en.wikipedia.org/wiki/EVEX_prefix

那么他们如何能够干净地解码该指令?


我查看了英特尔手册,他们似乎只提到了VEX中的位反转,而不是EVEX.

OTOH表中的沙堆说,在这些EVEX RxB位也应该被反转.

哪一项是正确的?

x86 assembly opcode instructions

9
推荐指数
1
解决办法
358
查看次数