首页
社区
课程
招聘
[求助]在栈中构造字符串的方式
发表于: 2012-6-26 19:41 7023

[求助]在栈中构造字符串的方式

2012-6-26 19:41
7023
如果使用这种方式会导致编译器使用其他节的数据:
char *msg="this is a msg";

以下这种方式与上面差不多,只不过它会在操作时将字符串复制到栈中
char msg[]="this is a msg";

下面这种方法,它的字符串只出现在栈中:
char msg[]={'t','h','i','s','i','s','a','m','s','g'};

我想请问一下,如果我只想让字符串出现在栈中(就像第三种),除了这种烦琐的写法外,还有没有别的比较方便的写法?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
以前写shellcode的时候直接push 'AAAA'这样的。。。
2012-6-26 19:44
0
雪    币: 62
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
这个方法我也用,不过有点麻烦。我主要是想用高级语言写一个小小的保护系统,不想让它涉及到太多pe其他节中的数据。

。。对于这个问题,写个简单的小工具自动生成吧:
上传的附件:
2012-6-26 20:04
0
雪    币: 128
活跃值: (27)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
我也非常渴望能有个方法非常方便,
但貌似一直无解
所以只能根据自己的情况自己解决问题

一般我就用editplus,然后用正则表达式替换一下,不用自己写程序的
2012-6-26 20:08
0
雪    币: 31
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
一般pe的cs=ds=ss,或许可以通过Push,mov,movs,stos等来构造吧?
2012-6-27 09:02
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
char mytext[100];

strcpy(mytext,"adfhgsadthysfhy");
这样就在栈中
2012-6-27 19:54
0
雪    币: 62
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=liuyq;1083167]char mytext[100];

strcpy(mytext,"adfhgsadthysfhy");
这样就在栈中[/QUOTE]

但是"adfhgsadthysfhy"这句本身是要存储在栈外的吧?
2012-6-27 20:35
0
雪    币: 43
活跃值: (186)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=凭凡;1082931]如果使用这种方式会导致编译器使用其他节的数据:
char *msg="this is a msg";

以下这种方式与上面差不多,只不过它会在操作时将字符串复制到栈中
char msg[]="this is a msg";

下面这种方法,它的字符串只出现在栈中:
...[/QUOTE]

百度了下,貌似有人写过:
【分享】全局字符串转换为局部变量存储防止软件被静态分析暴露敏感字符串
http://www.cnblogs.com/daxingxing/archive/2012/06/12/2546329.html
2012-6-28 10:36
0
雪    币: 154
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个问题无解,在高优化参数下,编译器(GCC 4.2+)能识别只读字符数组并把数组移到只读段“.data”,最终效果就和直接定义字符串相同,因为字符串本质上就是字符数组。而对程序员来说,反而降低了源码可读性。

一种类似方法是:
char msg[4];
msg[0] = 's';msg[1] = 't';msg[2] = 'r';msg[3] = '\0';
编译器无法做出优化,字符串只能在栈中创建,但是代价是牺牲了性能,一句 mov ptr [xxx+??], 'A' 这样的指令就有5~9字节的长度。

如果VC尚未有这种优化策略,并不表示以后不会添加,对于长字符数组(你的方法3)用这种方法可以节省很大的运行开销。
2012-6-29 01:00
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
不知道这样可以不.
上传的附件:
2012-6-29 13:15
0
游客
登录 | 注册 方可回帖
返回
//