能力值:
( LV2,RANK:10 )
[求助]修改汇编指令实际操作
完全不理解你这么做的意义,为什么非要是在缺页时修改指令执行效果而不是在所有时候
而且缺页异常是由内核处理的,永远不进入Ring 3
最终目的是让有些地方访问的是 mov eax,3,有些 mov eax,0
如果你说的访问是读取,那么你可以通过设置页面不可读属性,然后从异常的Eip判断
如果你说的访问是执行,那么不可能.x86下call/jmp一处不可执行代码是不会产生异常的,所以你永远也无法知道是谁执行了这一块代码(尤其是jmp/jcc的情况下)
能力值:
( LV2,RANK:10 )
能力值:
( LV2,RANK:10 )
[求助]修改汇编指令实际操作
更底层你就真的只能用Hypervisor了,指令缓存不受你控制
硬件断点不能用你还可以用内存断点来实现:设置不可执行,异常处理里检查是不是指定地址:是就按上面的方法模拟,不是就恢复页面保护属性,单步,再次设置不可执行
不过页面保护好像不是特别稳定,我以前想利用页面保护做跨平台的API Hook的时候有一些奇怪的问题
能力值:
( LV2,RANK:10 )
能力值:
( LV2,RANK:10 )
[求助]修改汇编指令实际操作
单步直接用单步标志的好不好...哪有像你这样单步的
而且你这样就修改了指令了,楼主说了是"不修改汇编代码,修改实际操作",你根本说的不是楼主想要的
能力值:
( LV2,RANK:10 )
能力值:
( LV2,RANK:10 )
[求助]修改汇编指令实际操作
如果楼主真想实现这方面的功能,可以用虚拟化技术写一个Hypervisor,然后你就可以实现你主楼所希望的功能
回复5#的时候我想到了,用硬件断点在你想要的指令下断,然后在异常处理里手动模拟指令执行,最后EXCEPTION_CONTINUE_EXECUTION
最开始只是在想如何"修改"指令操作,忘了可以这么做了
//call a
ExceptionInfo->ContextRecord->Esp -= sizeof(SIZE_T);
*(SIZE_T *)(ExceptionInfo->ContextRecord->Esp) = ExceptionInfo->ContextRecord->Eip + 5;
ExceptionInfo->ContextRecord->Eip = B;
//mov eax,3
ExceptionInfo->ContextRecord->Eax = 0;
ExceptionInfo->ContextRecord->Eip += 5; //B8 03 00 00 00
能力值:
( LV2,RANK:10 )
能力值:
( LV2,RANK:10 )
能力值:
( LV2,RANK:10 )
能力值:
( LV2,RANK:10 )
能力值:
( LV2,RANK:10 )
[求助]内核gz文件加密,如何逆向解密
这个,还有这两个
http://bbs.pediy.com/showthread.php?t=182122
http://bbs.pediy.com/showthread.php?t=182102
看雪不应该清理一些低质量的帖子么?或者向StackOverflow那样增加投票系统
能力值:
( LV2,RANK:10 )
[求助]CPU执行程序的最小单位是什么?
我已经在#5列出了所有可以使用LOCK前缀的指令,除此以外的都不能使用这个前缀,也都不能保证是原子操作.
不使用LOCK的话只有如下行为是被保证为原子操作的:
• Reading or writing a byte
• Reading or writing a word aligned on a 16-bit boundary
• Reading or writing a doubleword aligned on a 32-bit boundary
• Reading or writing a quadword aligned on a 64-bit boundary
• 16-bit accesses to uncached memory locations that fit within a 32-bit data bus
• Unaligned 16-, 32-, and 64-bit accesses to cached memory that fit within a cache line
抱歉,第二个问题我在看的时候想的是时钟周期和多级流水线去了.但我们所说的是执行程序的最小单位,就程序而言它们只有指令这个概念而没有指令周期这个概念
能力值:
( LV2,RANK:10 )
[求助]CPU执行程序的最小单位是什么?
谁跟你说所有的机器指令都是原子操作的?
在x86体系下只有一部分指令是原子操作的:比如向对齐地址mov[Vol3 8.1.1 Guaranteed Atomic Operations]
还有一部分需要用LOCK前缀锁总线才行:ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, CMPXCHG16B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, and XCHG[Vol2 3.2.LOCK]
剩下的指令就都不是原子操作了,难道rep movsb也是原子操作?
CPU执行程序的最小单位就是单条指令.CPU可以在内部分多级流水线执行,但是这不能说是执行程序的最小单位,而是执行指令的最小单位.这就好比我们吃饭的最小单位是一口而不是一个蛋白质分子
能力值:
( LV2,RANK:10 )
能力值:
( LV2,RANK:10 )
能力值:
( LV2,RANK:10 )
能力值:
( LV2,RANK:10 )
能力值:
( LV2,RANK:10 )