Guido 发表于 2020-11-10 21:49:39

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

本帖最后由 Guido 于 2020-11-10 21:49 编辑

1.编写系统函数strcpy
//编写字符串拷贝函数:void StrCopy(char* pDest,char *pSrc)
//在main函数中调用以上函数,从来源字符串向目标字符串复制所有的字符包括结尾符。
//例如:
//int main()
//char s1,s2 = "吕鑫老师:”;
//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 = pSrc;
      } while (pSrc);
}
int main()
{
      char s1, s2 = "吕鑫老师:";
      strcpy(s1, "@$#%abc123xyz");   //调用的是系统函数,且这一字符串存储在栈内,因此是由栈传递向s1的
      puts(s1);
      StrCopy(s1, s2);//调用自己写的函数
      puts(s1);
      return 0;
}
#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, s2 = "吕鑫老师";
      strcpy(s1, "@$#%abc123xyz");   //调用的是系统函数,且这一字符串存储在栈内,因此是由栈传递向s1的
      puts(s1);
      StrCopy(s1, s2);//调用自己写的函数
      puts(s1);
      return 0;
}

2.编写系统函数strcat
//编写字符串追加(或者叫字符串连接)函数:
//void StrCat(char *pDest,char *pSrc)
//在main函数中调用以上函数,从来源字符串向目标字符串复制所有的字符包括结尾符。
//int main()
//{
//char s1,s2 = "吕鑫老师:‘
//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++;
      }
      do
      {
                pDest = pSrc;
      } while (pSrc);
}


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

#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 = " 吕鑫老师:", s2 = "NB~!";
      StrCat(s1, s2); //自己编写的函数
      puts(s1);
      return 0;
}

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 == arg2 && arg1!='\0' && arg2!='\0')
      {
                i++;
      }
      if (arg1 > arg2)
                return 1;
      else if(arg1 == arg2)
                return 0;
      else return -1;
}


int main()
{
      char s1 = "abcdef";
      char s2 = "abcde";
      int n;
      n = StrCmp(s1, s2);
      return 0;
}
//编写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 = "abcd";
      char s2 = "abcd";
      int n;
      n = StrCmp(s1, s2);
      return 0;
}


roger 发表于 2020-11-17 10:11:26

好好看看汇编代码,这节课的汇编很重要,以后会经常遇到真假码比较,你要能反推出C代码

Guido 发表于 2020-11-18 09:26:24

roger 发表于 2020-11-17 10:11
好好看看汇编代码,这节课的汇编很重要,以后会经常遇到真假码比较,你要能反推出C代码 ...

可以可以,之前都没看过反汇编代码,提醒了我,好好看看去。

ZARD 发表于 2020-11-21 14:04:39

请问这是吕鑫老师的课吗? 名字叫啥?
页: [1]
查看完整版本: 逆向学习第16天_字符串处理函数编写