c - 有没有办法从c中的基地址获取完整数组?

标签 c eclipse pointers memory parent-child

我正在尝试通过地址的“execl”命令将“unsigned char *”传递给另一个程序

这是第一个程序:

unsigned char myString;
...
unsigned char * myarr = malloc(80*sizeof(char));
...
//myarr is filled with some encrypted data
...
printf("\nresult:\t");
for(i=0;*(myarr+i)!=0x00;i++)
    printf("%X ",*(myarr+i));
...
myString = malloc(80*sizeof(char));
myString = *myarr;

...
execl(".../Child", "Child", &myString, NULL);

关于第二个程序;

unsigned char *myString;
...
myString = (unsigned char *)argv[1];
...
unsigned char * mynewarr = malloc(80*sizeof(char));
mynewarr = myString;
...
printf("\nresult:\t");
for(i=0;*(mynewarr+i)!=0x00;i++)
    printf("%X ",*(mynewarr+i));

这是我得到的结果

第一个程序

result: 20 DD 3E 99 2 94 7E C6 D DD 4 A 36 85 5B DA

第二个程序

result: 20

为什么结果不同?我究竟做错了什么?请帮助我。

我正在使用 eclipse,我在 ubuntu 13.10 中编码。

最佳答案

我道歉。我完全误解了你的问题并抢先了。

execl 的参数必须是空终止字符串,而您只是错误地传递了 myString。那就是说你在做什么有一些警告。您不能在加密数据中嵌入空值,否则它们将被(过早地)解释为字符串的结尾。正如 Zan Lynx 指出的那样,如果字符串是二进制的,您可以对其进行文本编码。您也不能传递无限长度的字符串。参数列表和环境的组合大小有多大的系统限制,如果超过 execl 将失败并返回 E2BIG。 (我最初的误解是认为你试图绕过这个限制。)

这是您的程序的最小工作示例(有些自由)。

第一个程序:

int main(int argc, char *argv[])
{
    unsigned char *myString = malloc(80 * sizeof(char));

    strcpy(myString, "filled with secret sauce");

    printf("\nresult:\t");

    for(int i = 0; *(myString + i) != '\0'; i++)
        printf("%X ", *(myString + i));

    printf("\n");

    execl("./execpgm", "execpgm", myString, (char *) NULL);

    perror("execl");
    exit(1);
}

第二个程序:

int main(int argc, char *argv[])
{   
    unsigned char *mynewarr = malloc(80 * sizeof(unsigned char));

    strncpy(mynewarr, argv[1], 80);

    printf("\nresult:\t");

    for (int i = 0; *(mynewarr + i) != '\0'; i++)
        printf("%X ", *(mynewarr + i));

    printf("\n");
    exit(1);
}

再一次,我很抱歉在没有首先理解的情况下回答。

关于c - 有没有办法从c中的基地址获取完整数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645863/

相关文章:

c - 为什么标准库中的函数 "qsort"在我的代码中不起作用?

c++ - 弄清楚晦涩的指针typedef

eclipse如何在调试透视图中显示包资源管理器

c++ - Eclipse 找不到头文件,即使设置了包含路径

java - 在Eclipse中使用不同编程语言的方法是什么?

c - "#define PACK_OFFSET ((size_t)((pack_t *)0)->data)"是什么意思

c - 指向结构打印的指针数组

c - 错误 C2106 : '=' left operand must be l-value

c - 使用 NGINX 运行 C FastCGI 脚本

c - 在函数之间传递指向结构数组的指针