小编use*_*569的帖子

如何在x86中编码相对较短的jmp

假设我想使用以下操作码进行短跳转:

EB CBJMP rel8

"跳转,RIP = RIP + 8位位移符号扩展到64位"

(其中CB是一个字节有符号值,表示与EIP寄存器中的方向有关的相对偏移量)

也许总是偏移量将偏移+ 2,因为此短跳转中的执行时间(参考方向)中的EIP是twobyte指令的基础,但加数始终发生

eb 30 = jmp 0x00000032(+30)

eb e2 = jmp 0xffffffe4(-30)

那么EIP可以是故意相同的方向,因为fe + 2是00EIP.

eb fe = jmp 0x00000000

我发现令人惊讶的是,虽然数字是负数,但是过度偏移也会出现分叉.但在英特尔,我发现没有提及(可能因为3000页).

英特尔®64和IA-32架构软件开发人员手册:Vol.2A 3-423

近跳跃,其中跳跃范围从当前 EIP值限制为-128到+127 .

然后我考虑了三种可能性:

  1. 是+2因为是执行时EIP 的后/后值
  2. 编码值不是2s分量编码的有符号数.
  3. 这出现在手册中,但我没有看到,因为我很愚蠢

x86 assembly x86-64

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

如何在没有C本机编译器的情况下创建C编译器

这是一个简单的问题.如果要编译C编译器需要一个C编译器......也许直接用汇编代码?也许内核提供了将C转换为汇编程序并创建升级基础结构的基本工具?这也是一个愚蠢的问题,但我真的很感兴趣如何设计一个操作系统(不是我)从0开始与CPU和内存交互.

c compiler-construction assembly

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

为什么wxwidgets会松散地绘制圆形或圆形多边形?

例如,如果我画这个圆圈

圈

显然是不精确和丑陋的.有没有办法调整抽奖的敏感度

编辑:

我可以总结一下:

self.da = wx.Panel(self, -1, size=(-1, 800))
self.da.Bind(wx.EVT_PAINT, self.paint)

self._buffer = wx.EmptyBitmap(500,500) # creating empty buffer
dc = wx.MemoryDC(self._buffer)  # to handle the buffer
dc.SetBackground( wx.Brush("White") )  # setting background
dc.DrawCircle(50,40,100)  #drawing circle


def paint(self, evt):
    dc = wx.BufferedPaintDC(self.da, self._buffer) #on paint event draw this
Run Code Online (Sandbox Code Playgroud)

wxwidgets wxpython

4
推荐指数
1
解决办法
521
查看次数

Sublime文本正在连续删除文档的表格

我无法正常使用python,因为Sublime text 2正在删除缩进.如果我添加并编辑文档的另一部分,ST将再次删除所有表格.显然python会抛出错误:IndentationError:意外的缩进.

我该怎么调整呢?

python sublimetext

2
推荐指数
1
解决办法
663
查看次数