首页
社区
课程
招聘
c语言不用括号输出hello world的问题
发表于: 2014-8-19 00:31 16441

c语言不用括号输出hello world的问题

2014-8-19 00:31
16441
收藏
免费 0
支持
分享
最新回复 (48)
雪    币: 2
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
26
他的二进制码的基址是 0x00408000. 你需要添加一个连接选项 /base:0x00408000, 他的代码明显用到没有重定位的数据


.data:0040800C 68 26 80 40 00 push offset aHelloWorld ; "Hello world!\n"
.data:00408011 6A F5 push 0FFFFFFF5h
.data:00408013 FF 15 34 80 40 00 call dword_408034


这样加载的地址不同肯定会xx不能read, 其实就是写shellcode, 加上对编译的理解.
2014-8-23 15:27
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
改了base
0X00402013引用的0X00408034不能为read
2014-8-23 15:36
0
雪    币: 2
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
28
我也测试了一下, 你可能没注意最后的link信息

LINK : warning LNK4023: base address 408000 not a 64K multiple; assumed 410000
2014-8-23 15:39
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
[QUOTE=唱哥;1311259]我也测试了一下, 你可能没注意最后的link信息

LINK : warning LNK4023: base address 408000 not a 64K multiple; assumed 410000
[/QUOTE]

没有学过编译方面的知识..能不能告诉我怎么操作 谢谢
2014-8-23 16:10
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
[QUOTE=唱哥;1311259]我也测试了一下, 你可能没注意最后的link信息

LINK : warning LNK4023: base address 408000 not a 64K multiple; assumed 410000
[/QUOTE]

另外我是XPSP3 32位
2014-8-23 16:11
0
雪    币: 134
活跃值: (11)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
31
18楼代码无误
我按我本机编译的地址重新计算了偏移,其他没变
上传的附件:
2014-8-23 16:20
0
雪    币: 134
活跃值: (11)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
32
做了张图,是在不固定基址的情况下需要修改的几处地址位置
调试下断点,然后看反汇编窗口,不知道能不能看懂我画的
上传的附件:
  • 2.jpg (58.63kb,23次下载)
2014-8-23 16:37
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
我这里偏移应该有问题..怎么找到自己这里的偏移并设置?
2014-8-23 16:44
0
雪    币: 134
活跃值: (11)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
34
我画了图了。。你对着看看吧
2014-8-23 16:49
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
我试试吧..不过希望能有通用的代码- -动态定位的
2014-8-23 17:21
0
雪    币: 134
活跃值: (11)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
36
18楼只是给个例子,想通用就自己写代码从TEB开始遍历去找kernel32.dll中的GetStdHandle (函数一) 和 WriteConsoleA (函数二) 的地址
2014-8-23 17:42
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
出题人说你这个定义数组和char main= main=貌似不一样..你可以运行试试看= = 另外说是动态定位printf应该可行
2014-8-23 18:22
0
雪    币: 7466
活跃值: (2052)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
38
固定printf函数地址写法! 38字节搞定

<00402000>
        push    ebp
        mov     ebp, esp
        sub     esp, 0x8
        and     esp, -0x10
        mov     eax, 0xFFBFDFE5//字符串指针 not 0040201A
        not     eax
        mov     dword ptr [esp], eax
        call    7599C5B9 //WIN7 printf 函数指针
        leave
        retn
       

       
55 89 E5 83 EC 08 83 E4 F0 B8 E5 DF BF FF F7 D0 89 04 24 E8 A1 A5 59 75 C9 C3 48 65 6C 6C 6F 57 6F 72 6C 64 0A 00
char main=0x55,main1=0x89,main2=0xe5,main3=0x83,main4=0xec,main5=0x08,main6=0x83,main7=0xe4,main8=0xf0,main9=0xb8,main10=0xe5,main11=0xdf,main12=0xbf,main13=0xff,main14=0xf7,main15=0xd0,main16=0x89,main17=0x04,main18=0x24,main19=0xe8,main20=0xa1,main21=0xa5,main22=0x59,main23=0x75,main24=0xc9,main25=0xc3,main26=0x48,main27=0x65,main28=0x6c,main29=0x6c,main30=0x6f,main31=0x57,main32=0x6f,main33=0x72,main34=0x6c,main35=0x64,main36=0x0a,main37=0x00;

<00402000>
        push    ebp
        mov     ebp, esp
        sub     esp, 0x8
        and     esp, -0x10
        mov     eax, 0xFFBFDFE5 //字符串指针 not 0040201A
        not     eax
        mov     dword ptr [esp], eax
        call    77C1186A //WINXP printf 函数指针
        leave
        retn
       
55 89 E5 83 EC 08 83 E4 F0 B8 E5 DF BF FF F7 D0 89 04 24 E8 52 F8 80 77 C9 C3 48 65 6C 6C 6F 57 6F 72 6C 64 0A 00
char main=0x55,main1=0x89,main2=0xe5,main3=0x83,main4=0xec,main5=0x08,main6=0x83,main7=0xe4,main8=0xf0,main9=0xb8,main10=0xe5,main11=0xdf,main12=0xbf,main13=0xff,main14=0xf7,main15=0xd0,main16=0x89,main17=0x04,main18=0x24,main19=0xe8,main20=0x52,main21=0xf8,main22=0x80,main23=0x77,main24=0xc9,main25=0xc3,main26=0x48,main27=0x65,main28=0x6c,main29=0x6c,main30=0x6f,main31=0x57,main32=0x6f,main33=0x72,main34=0x6c,main35=0x64,main36=0x0a,main37=0x00;

GCC命令
gcc.exe "D:\codes\hello.c" -lm -w -o "hello"
2014-8-23 18:37
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
为什么我总是不成功呢
2014-8-28 23:45
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
这代码明明用的是MessageBox,,为什么你显示的控制台
2014-8-29 00:06
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
这代码明明用的是MessageBox,,为什么你显示的控制台
2014-8-29 00:10
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
看错了 ,
2014-8-29 00:14
0
雪    币: 1555
活跃值: (3118)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
43
动态定位简单,用shellcode技术就行呀
2014-8-29 08:05
0
雪    币: 1555
活跃值: (3118)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
44
那就用shellcode技术 动态获取到所用的函数输出退出就行呀
2014-8-29 08:08
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
以前学的忘得差不多了。
2014-9-2 06:52
0
雪    币: 49
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
小菜 学习一下
2014-9-2 10:12
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
潜水。。。
2014-9-22 21:54
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
汇编感觉学不懂…
2014-9-22 23:21
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
49
Windows下不存在直接写屏,直接写屏是DOS时代的词汇。。。
2014-9-22 23:26
0
游客
登录 | 注册 方可回帖
返回
//