能力值:
( LV9,RANK:1210 )
2 楼
Windows Interals 4th, WRK
能力值:
(RANK:650 )
3 楼
doskey在pediy转过毛德操的一些文章
里面有讲到CreateProcessW的详细过程
个人觉得写的比较好
推荐一下
能力值:
(RANK:330 )
4 楼
看代码看wrk
看理论看深入解析windows操作系统
能力值:
(RANK:210 )
5 楼
深入解析Windows操作系统 是潘爱民刚翻译的 <Microsoft® Windows® Internals, Fourth Edition: Microsoft Windows Server™ 2003, Windows XP, and Windows 2000> 里面有讲Createprocess和过程
另外<intel 汇编语言程序设计>也涉及到了几句话
能力值:
( LV2,RANK:10 )
6 楼
不好意思,问一下WRK是什么。深入解析windows操作系统,这本书我去找找看。
能力值:
( LV2,RANK:10 )
7 楼
对了,还想问一个问题。就在这里问了吧,不用再开新帖占用看雪的版面了。是关于内存中指令的执行的,CPU究竟是按一个什么样的规律去决定每一条指令的起始地址的啊,花指令可以迷惑像OD这样反汇编软件,让它显示错误的结果,却怎么样也干扰不到CPU对指令正确执行吧。这是为什么了?
由此可以引发以下这个问题,在OD中如果在程序的某个地方断下来,这时候如果按F9,应该就是执行的ContinueDebugEvent,程序的结果肯定不会错。但如果用单步的方式在同样的地方开始执行程序,会不会因为碰到花指令而让程序执行出错误的结果了?
能力值:
( LV12,RANK:1010 )
8 楼
严重同意。都看最保险~
能力值:
( LV2,RANK:10 )
9 楼
其实很简单,CPU解释的永远是eip指向的那条指令,也就是说,cpu只读取位于eip地址上的指令,后面的怎么样它不管。
但是反汇编器解释时往往是要把你所看见的地方的数据都转换为代码的,所以,会把无用的数据看作指令的一部分,这就是cpu不出错,但od里看是不对的道理。
比如:.text:000118E2 后面的数据是永远执行不到的,
.text:000118DF fdiv dword ptr [eax] ; Divide Real
.text:000118E1 push edi
这些可能也是永远执行不到的。
.text:000118D2 lea eax, loc_118D8 ; Load Effective Address
.text:000118D8
.text:000118D8 loc_118D8: ; DATA XREF: start:loc_118D2o
.text:000118D8 add eax, 0Eh ; Add
.text:000118DB jmp short loc_118E2 ; Jump
.text:000118DD ; ---------------------------------------------------------------------------
.text:000118DD jmp short loc_118D2 ; Jump
.text:000118DF ; ---------------------------------------------------------------------------
.text:000118DF fdiv dword ptr [eax] ; Divide Real
.text:000118E1 push edi
.text:000118E2
.text:000118E2 loc_118E2: ; CODE XREF: start+19j
.text:000118E2 jmp eax ; JMP 000118E6
.text:000118E2 ; ---------------------------------------------------------------------------
.text:000118E4 db 0E9h ; ?
.text:000118E5 db 21h ; !
.text:000118E6 ; ---------------------------------------------------------------------------
.text:000118E6 push [ebp+DriverObject]