| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 747 人关注过本帖
标题:写了个复制当前编译代码的程序玩玩~~
只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
收藏
已结贴  问题点数:20 回复次数:7 
写了个复制当前编译代码的程序玩玩~~
突然天马行空~获得点灵感~~于是写了个复制当前编译代码的程序~~毕竟文件太久没有操了~感觉有点生疏了~看看这个程序的运行效果如何~~

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void Copy_Current_File();

int main()
{
    Copy_Current_File();

    return 0;
}
void Copy_Current_File()
{
    FILE* fp=NULL;
    FILE* fps=NULL;

    char buf [80]={0};
    char* p=buf;

    memmove(buf,__FILE__,sizeof(char)*strlen(__FILE__));
    p+=strlen(buf);

    while (*p!='.')
    {
        *p='\0';
        *p--;
    }

    strcat(buf,"txt");

    if ((fp=fopen( __FILE__,"r"))==NULL)
    {
         fprintf( stderr, "%d\n", __LINE__ );
         exit( EXIT_FAILURE );
    }

    if ((fps=fopen(buf,"w"))==NULL)
    {
        fprintf( stderr, "%d\n", __LINE__ );
        exit( EXIT_FAILURE );
    }

    while (!feof(fp))
        putc(fgetc(fp),fps);

    fclose(fp);
    fclose(fps);

}


[此贴子已经被作者于2017-5-18 23:43编辑过]

搜索更多相关主题的帖子: 如何 
2017-05-18 23:22
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:20 
源文件不是现成的吗,为何还要写个程序来复制?
编译好的程序运行在找不到源文件的地方也无所作为?
2017-05-19 10:08
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 2楼 吹水佬
本来打算通过这份来解析编译文件结构~不过感觉这样意义不大~就是发来看看而已~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-19 10:12
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 2楼 吹水佬
顺便请教一个问题~能不能找到储存变量符号的符号常量地址?~具体点就是编译器通过解析变量名称来捕获该变量的地址的符号常量储存地址~打算通过这种方法来搜出已知结构体的所有其成员的地址~~

PS或者直接点说的是能否找到存放变量的符号表地址范围?~~

[此贴子已经被作者于2017-5-19 10:31编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-19 10:18
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
编译后,源文件的“变量名”都转换成地址表示,编译后指令语句见到的只是地址(或+偏移量)。
2017-05-19 11:06
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 5楼 吹水佬
谢谢你的解答~如果是这样那就算了~这个问题以后有机会研究编译器架构的时候再来看看~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-19 11:11
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
有没有谁能试出这行代码的运行效果~~如果有就说说效果是怎么样的~~原来cl命令是可以用来编译C的~~哈~~

程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<windows.h>
#include<conio.h>
#include <io.h>
#define LEN 80

void Copy_Current_File();

int main()
{
    Copy_Current_File();

    return 0;
}

void Copy_Current_File()
{
    FILE* fp=NULL;
    FILE* fps=NULL;

    char buf [LEN]={0};
    char cl_buf[LEN]={"\0"};
    char* p=buf;

    char t1['z'-'a'+2]={0};
    char t2['z'-'a'+2]={0};

    int i=0;
    int j=0;
    int t=0;
    int s=0;

    srand((unsigned)time(NULL));

    for (i=0;i<'z'-'a'+1;++i)
        t2[i]=i;

    for (i=0,t='z'-'a'+1;i<'z'-'a'+1;i++,t--)       //生成方块数量的随机数
    {
           s=rand()%t;

           t1[i]=t2[s];   
        
           for (j=s;j<t-1;++j)
               t2[j]=t2[j+1];
    
    }

    for (i=0;i<'z'-'a'+1;++i)
    {
        memset(cl_buf,0,sizeof(cl_buf));
        strcpy(cl_buf,"cl/nologo ");

        p=buf;

        memset(buf,0,sizeof(buf));
        memmove(buf,__FILE__,sizeof(char)*strlen(__FILE__));
        p+=strlen(buf);

         while (*p!='\\')
        {
             *p='\0';
             *p--;
        }

        *p++;
           *p=t1[i]+'a';
           *(p+1)='\0';

           strcat(buf,".c");
           strcat(cl_buf,buf);

        if (access(buf,0)!=0)
            break;
    }

    if (i=='z'-'a'+1)
        return ;

    if ((fp=fopen( __FILE__,"r"))==NULL)
    {
         fprintf( stderr, "%d\n", __LINE__ );
         exit( EXIT_FAILURE );
    }

    if ((fps=fopen(buf,"w"))==NULL)
    {
        fprintf( stderr, "%d\n", __LINE__ );
        exit( EXIT_FAILURE );
    }

    while (!feof(fp))
        putc(fgetc(fp),fps);

    fseek(fps,-1L,SEEK_END);
    putc('\0',fps);

    fclose(fp);
    fclose(fps);

    system(cl_buf);
    buf[strlen(buf)-1]='\0';
    buf[strlen(buf)-1]='\0';
    system(buf);
}


[此贴子已经被作者于2017-5-20 00:13编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-19 22:01
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 7楼 九转星河
我测试的效果是这样~~看上去啥都没事发生~~~真的是这样么~~感觉可以用这个功能简单合成一些简单的代码玩玩~~

图片附件: 游客没有浏览图片的权限,请 登录注册


然后稍微把代码改了一下~隐藏了提示信息~这样看上实现效果好很多~~~~

[此贴子已经被作者于2017-5-20 00:16编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-19 22:18
快速回复:写了个复制当前编译代码的程序玩玩~~
数据加载中...
 
   



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

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