查看: 419|回复: 3

[原创图文] 逆向学习第16天_字符串处理函数编写

[复制链接]

17

主题

32

帖子

2

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
242
荣耀
0
rank
0
违规
0
发表于 2020-11-10 21:49:39 | 显示全部楼层 |阅读模式
本帖最后由 Guido 于 2020-11-10 21:49 编辑

1.编写系统函数strcpy
//编写字符串拷贝函数:void StrCopy(char* pDest,char *pSrc)
//在main函数中调用以上函数,从来源字符串向目标字符串复制所有的字符包括结尾符。
//例如:
//int main()
//char s1[32],s2[32] = "吕鑫老师:”;
//strcpy(s1,"@$#%abc123xyz");//从栈内数组
//puts(s1);
//StrCopy(s1,s2);//从常量区
//puts(s1);
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

void StrCopy(char *pDest, char *pSrc)  //利用的是下标法
{
        int i = 0;
        do
        {
                pDest[i] = pSrc[i];
        } while (pSrc[i++]);
}
int main()
{
        char s1[32], s2[32] = "吕鑫老师:";
        strcpy(s1, "@$#%abc123xyz");   //调用的是系统函数,且这一字符串存储在栈内,因此是由栈传递向s1的
        puts(s1);
        StrCopy(s1, s2);//调用自己写的函数
        puts(s1);
        return 0;
}

逆向学习第16天_字符串处理函数编写

逆向学习第16天_字符串处理函数编写

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

void StrCopy(char *pDest, char *pSrc)  //利用的是指针法
{
        do
        {
                *pDest = *pSrc;            //如果不加*  例如是 pDest=pSrc 就是将整个字符串赋值过去,只有加了*之后,才是一个一个送过去
                pDest++;
        } while (*(pSrc++));             //这里的pSrc++就是让下次取字符的时候,去取后面的字符
}
int main()
{
        char s1[32], s2[32] = "吕鑫老师";
        strcpy(s1, "@$#%abc123xyz");   //调用的是系统函数,且这一字符串存储在栈内,因此是由栈传递向s1的
        puts(s1);
        StrCopy(s1, s2);//调用自己写的函数
        puts(s1);
        return 0;
}

逆向学习第16天_字符串处理函数编写

逆向学习第16天_字符串处理函数编写

2.编写系统函数strcat
//编写字符串追加(或者叫字符串连接)函数:
//void StrCat(char *pDest,char *pSrc)
//在main函数中调用以上函数,从来源字符串向目标字符串复制所有的字符包括结尾符。
//int main()
//{
//char s1[32],s2[32] = "吕鑫老师:‘
//StrCopy(s1,s2);//从栈内数组
//puts(s1);
//StrCat(s1,"@$#%abc123xyz");//从常量区
//puts(s1);
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

void StrCat(char *pDest,char *pSrc)//利用的是下标法
{
        int i = 0;
        int j = 0;
        while (pDest[i])
        {
                i++;
        }
        do
        {
                pDest[i++] = pSrc[j];
        } while (pSrc[j++]);
}


int main()
{
        char s1[32]=" 吕鑫老师:",s2[32] = "NBNBafasf";
        StrCat(s1, s2); //自己编写的函数
        puts(s1);
        return 0;
}

逆向学习第16天_字符串处理函数编写

逆向学习第16天_字符串处理函数编写

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

void StrCat(char *pDest, char *pSrc)//利用的是指针法
{
        while (*pDest)
        {
                pDest++;
        }

        do
        {
                *pDest = *pSrc;
                pDest++;
        } while (*(pSrc++));
}


int main()
{
        char s1[32] = " 吕鑫老师:", s2[32] = "NB~!";
        StrCat(s1, s2); //自己编写的函数
        puts(s1);
        return 0;
}

逆向学习第16天_字符串处理函数编写

逆向学习第16天_字符串处理函数编写

2.编写系统函数strcmp
//编写strcmp,这个函数是根据ascall码的大小一次进行比较的
//strcmp(s1,s2)
//s1>s2  返回正值   s1=s2  返回0   s1<s2  返回赋值

#include<stdio.h>

int StrCmp(char *arg1, char *arg2)//用下标法
{
        int i = 0;

        while (arg1[i] == arg2[i] && arg1[i]!='\0' && arg2[i]!='\0')
        {
                i++;
        }
        if (arg1[i] > arg2[i])
                return 1;
        else if(arg1[i] == arg2[i])
                return 0;
        else return -1;
}


int main()
{
        char s1[32] = "abcdef";
        char s2[32] = "abcde";
        int n;
        n = StrCmp(s1, s2);
        return 0;
}

逆向学习第16天_字符串处理函数编写

逆向学习第16天_字符串处理函数编写

//编写strcmp,这个函数是根据ascall码的大小一次进行比较的
//strcmp(s1,s2)
//s1>s2  返回正值   s1=s2  返回0   s1<s2  返回赋值

#include<stdio.h>

int StrCmp(char *arg1, char *arg2)//用指针法
{

        while (*arg1 == *arg2&& *arg1!= '\0' && *arg2!= '\0')
        {
                arg1++;
                arg2++;

        }
        if (*arg1>*arg2)
                return 1;
        else if (*arg1== *arg2)
                return 0;
        else return -1;
}


int main()
{
        char s1[32] = "abcd";
        char s2[32] = "abcd";
        int n;
        n = StrCmp(s1, s2);
        return 0;
}

逆向学习第16天_字符串处理函数编写

逆向学习第16天_字符串处理函数编写


温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
学逆向论坛-免费的逆向学习论坛
发表于 2020-11-17 10:11:26 | 显示全部楼层
好好看看汇编代码,这节课的汇编很重要,以后会经常遇到真假码比较,你要能反推出C代码

点评

可以可以,之前都没看过反汇编代码,提醒了我,好好看看去。  详情 回复 发表于 2020-11-18 09:26
论坛交流群:672619046

17

主题

32

帖子

2

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
242
荣耀
0
rank
0
违规
0
 楼主| 发表于 2020-11-18 09:26:24 | 显示全部楼层
roger 发表于 2020-11-17 10:11
好好看看汇编代码,这节课的汇编很重要,以后会经常遇到真假码比较,你要能反推出C代码 ...

可以可以,之前都没看过反汇编代码,提醒了我,好好看看去。
学逆向论坛-免费的逆向学习论坛

0

主题

28

帖子

0

精华

VIP

Rank: 16

学币
286
荣耀
1
rank
52
违规
0

    发表于 6 天前 | 显示全部楼层
    请问这是吕鑫老师的课吗? 名字叫啥?
    学逆向论坛-免费的逆向学习论坛
    微信公众号
    快速回复 返回顶部 返回列表