标题:问个printf()的问题,比较内急
只看楼主
朱三哥
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:311
专家分:359
注 册:2012-12-11
结帖率:62.07%
 问题点数:0 回复次数:4 
问个printf()的问题,比较内急
#include "windows.h"
#include <stdio.h>
#include "stdlib.h"
void main(){
  int a=1;
_asm{
     mov esi,[ebp+4]              //因为在调用main函数的时候 是creatprocess 函数建立进程,利用这个栈的地址来取得creatprocess进程的地址,也就是DLL的地址空间了
     and esi,0xffff0000            //页对齐
mmm: cmp word ptr [esi],0x5a4d   //比对MZ标志 用这个判定是否DLL文件的开始基地址
     jz  xxx  
     sub esi,0x10000               //以页为单位进行搜索
     jmp mmm
xxx: mov [ebp-4],esi                //将寻到的基地址值给变量a
    }
printf("%x",a);
}
这个a的值 应该是 7c800000  怎么printf(%x,a) 出来的数字是400000  而且还只有6位

求请教

[ 本帖最后由 朱三哥 于 2012-12-12 16:53 编辑 ]
搜索更多相关主题的帖子: void include 
2012-12-12 16:26
朱三哥
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:311
专家分:359
注 册:2012-12-11
得分:0 

这个事栈的情况  ebp 指向的是 0012fff0  的  a这个变量里面存放的就是 7c800000的值

[ 本帖最后由 朱三哥 于 2012-12-12 16:34 编辑 ]

哥,破你无线很难的,不要老是改,少看路由器上的灯,你会死啊
2012-12-12 16:30
朱三哥
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:311
专家分:359
注 册:2012-12-11
得分:0 
木有人在吗 ?

哥,破你无线很难的,不要老是改,少看路由器上的灯,你会死啊
2012-12-12 16:59
朱三哥
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:311
专家分:359
注 册:2012-12-11
得分:0 
别让我再为难了, 为了这么一小段代码 已经为难了一个星期了  求解答
OD 反汇编的程序
CPU Disasm
地址        十六进制 转存           命令                                       备注
00401005  /$ /E9 06000000   JMP 00401010                             ; xc.00401005(guessed Arg1,Arg2,Arg3)
0040100A  |  |CC            INT3
0040100B  |  |CC            INT3
0040100C  |  |CC            INT3
0040100D  |  |CC            INT3
0040100E  |  |CC            INT3
0040100F  |  |CC            INT3
00401010  |> \55            PUSH EBP
00401011  |.  8BEC          MOV EBP,ESP
00401013  |.  83EC 44       SUB ESP,44
00401016  |.  53            PUSH EBX
00401017  |.  56            PUSH ESI
00401018  |.  57            PUSH EDI
00401019  |.  8D7D BC       LEA EDI,[LOCAL.17]
0040101C  |.  B9 11000000   MOV ECX,11
00401021  |.  B8 CCCCCCCC   MOV EAX,CCCCCCCC
00401026  |.  F3:AB         REP STOS DWORD PTR ES:[EDI]
00401028  |.  C745 FC 64000 MOV DWORD PTR SS:[LOCAL.1],64
0040102F  |?  8B75 04       MOV ESI,DWORD PTR SS:[EBP+4]
00401032  |?  81E6 0000FFFF |AND ESI,FFFF0000
00401038  |.  66:813E 4D5A  |CMP WORD PTR DS:[ESI],5A4D
0040103D  |?  74 08         |JE SHORT 00401047
0040103F  |?  81EE 00000100 SUB ESI,10000
00401045  |?  EB F1         JMP SHORT 00401038
00401047  |.  8975 FC       MOV DWORD PTR SS:[LOCAL.1],ESI
0040104A  |.  8B45 FC       MOV EAX,DWORD PTR SS:[LOCAL.1]
0040104D  |?  50            PUSH EAX
0040104E  |?  68 A42F4200   PUSH OFFSET 00422FA4                     ; ASCII "%X
 "
00401053  |?  E8 38000000   CALL 00401090
00401058  |.  83C4 08       ADD ESP,8
0040105B  |.  5F            POP EDI
0040105C  |?  5E            POP ESI
0040105D  |?  5B            POP EBX
0040105E  |.  83C4 44       ADD ESP,44
00401061  |?  3BEC          CMP EBP,ESP
00401063  |?  E8 A8000000   CALL 00401110
00401068  \.  8BE5          MOV ESP,EBP

栈的情况
变量a的地址


痛苦啊 ebp-4的位置是 12FFBC   变量a的地址是 12ff7c
这个地方不懂  
更改ebp-4 后面的 4 又会影响到  变量a 的值  

打印出的结果又不对

[ 本帖最后由 朱三哥 于 2012-12-12 17:42 编辑 ]

哥,破你无线很难的,不要老是改,少看路由器上的灯,你会死啊
2012-12-12 17:33
麦香
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:65
专家分:163
注 册:2011-10-18
得分:0 
表示好高深

你们要进窄门,因为引向灭亡的门是宽的,路是大的,进去的人也多。
2012-12-12 17:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-390898-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.076852 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved