| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 742 人关注过本帖
标题:【求助】如何在字符窜后面接上一个地址
取消只看楼主 加入收藏
gpp6025
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2010-7-8
结帖率:84.62%
收藏
已结贴  问题点数:20 回复次数:3 
【求助】如何在字符窜后面接上一个地址
在一个字符串后面接上一个地址,问题是用指针得到地址然后用strcat()函数连接起来是数据类型不对,指针是32位整形,接在一个字符窜后面出错了,还有就是指针怎么引用本身呢?(就是怎么用这个地址,而不是指针指向的内容 :比如int *pointe;*pointe=123;要用123所在的内存地址也就是pointer这个指针要怎么用?&pointer这样用吗??)要怎么解决这2个问题啊??
望各位路过的大哥大姐们帮个忙~~
小弟在这谢谢了~~
=======================================================================================
重新说下问题~~ 求助~~~~~~~!!!!!!!!!!!!!!
第一个问题我用了另外一个指针在指向来到达我的目的,但是问题也出来了
这个小程序本身存在溢出问题,溢出点也定位出来了在over[]第十七个位置,所在over第十七个位置开始应该填写shellcode的地址对应的字符,但是问题是strcat(over,ret);函数接受的是char,就是说我要把ret指向的指针改成字符我尝试用strcat(over,(char)ret);出错了,所以我想可能是我这里面的地址被我转错了吧,或者还是其他什么问题???

#include "stdio.h"
#include <windows.h>
char shellcode[]="\x33\xDB\x53\x53\x53\x53\xB8\xEA\x04\xD5\x77\xFF\xD0";
void main()
{
    char sz[10],over[50];
    char endj='\0';
    int flate=0;
    LoadLibrary("user32.dll");
    char *pointe;
    pointe=shellcode;
    int *ret;
    *ret=(int)pointe;
    printf("the shellcode addr is %d \n",pointe);
    printf("input the char \n");
    for (int j=0;j<17;j++)//前十七个for循环自己填充
    {
        over[j]='a';
    }
    strcat(over,ret);
    for (unsigned int i=0;over[i]!=endj;i++);//输入的字符个数统计
    if (i<10) //是否溢出提示
    {
        printf("the value input has %d \n",i);
        printf("the pro is UNoverflow \n");
    }
    strcpy(sz,over);
    return;
}

[ 本帖最后由 gpp6025 于 2010-8-11 11:17 编辑 ]
搜索更多相关主题的帖子: 大哥大 字符串 如何 
2010-08-11 07:33
gpp6025
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2010-7-8
收藏
得分:0 
回复 2楼 erikyo
第一个问题我用了另外一个指针在指向来到达我的目的,但是问题也出来了
这个小程序本身存在溢出问题,溢出点也定位出来了在over[]第十七个位置,所在over第十七个位置开始应该填写shellcode的地址对应的字符,但是问题是strcat(over,ret);函数接受的是char,就是说我要把ret指向的指针改成字符我尝试用strcat(over,(char)ret);出错了~~跳到了一个0xcccccc的位置不是shellcode位置。所以我想可能是我这里面的地址被我转错了吧?

#include "stdio.h"
#include <windows.h>
char shellcode[]="\x33\xDB\x53\x53\x53\x53\xB8\xEA\x04\xD5\x77\xFF\xD0";
void main()
{
    char sz[10],over[50];
    char endj='\0';
    int flate=0;
    LoadLibrary("user32.dll");
    char *pointe;
    pointe=shellcode;
    int *ret;
    *ret=(int)pointe;
    printf("the shellcode addr is %d \n",pointe);
    printf("input the char \n");
    for (int j=0;j<17;j++)//前十七个for循环自己填充
    {
        over[j]='a';
    }
    strcat(over,ret);
    for (unsigned int i=0;over[i]!=endj;i++);//输入的字符个数统计
    if (i<10) //是否溢出提示
    {
        printf("the value input has %d \n",i);
        printf("the pro is UNoverflow \n");
    }
    strcpy(sz,over);
    return;
}
2010-08-11 11:06
gpp6025
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2010-7-8
收藏
得分:0 
回复 3楼 do8do8do8
第一个问题我用了另外一个指针在指向来到达我的目的,但是问题也出来了
这个小程序本身存在溢出问题,溢出点也定位出来了在over[]第十七个位置,所在over第十七个位置开始应该填写shellcode的地址对应的字符,但是问题是strcat(over,ret);函数接受的是char,就是说我要把ret指向的指针改成字符我尝试用strcat(over,(char)ret);出错了~~跳到了一个0xcccccc的位置不是shellcode位置。所以我想可能是我这里面的地址被我转错了吧?

#include "stdio.h"
#include <windows.h>
char shellcode[]="\x33\xDB\x53\x53\x53\x53\xB8\xEA\x04\xD5\x77\xFF\xD0";
void main()
{
    char sz[10],over[50];
    char endj='\0';
    int flate=0;
    LoadLibrary("user32.dll");
    char *pointe;
    pointe=shellcode;
    int *ret;
    *ret=(int)pointe;
    printf("the shellcode addr is %d \n",pointe);
    printf("input the char \n");
    for (int j=0;j<17;j++)//前十七个for循环自己填充
    {
        over[j]='a';
    }
    strcat(over,ret);
    for (unsigned int i=0;over[i]!=endj;i++);//输入的字符个数统计
    if (i<10) //是否溢出提示
    {
        printf("the value input has %d \n",i);
        printf("the pro is UNoverflow \n");
    }
    strcpy(sz,over);
    return;
}
2010-08-11 11:06
gpp6025
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2010-7-8
收藏
得分:0 
回复 6楼 do8do8do8
改为
  char *ret;
  ret=pointe;
刚才试了下,在指针指指针的情况下ret要为二级指针才可以,所以下面的strcat()函数使用又出问题了~~
2010-08-11 19:22
快速回复:【求助】如何在字符窜后面接上一个地址
数据加载中...
 
   



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

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