热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c语言[error]ldreturned1exitstatus_RE0.1

参考:CallingConvention​mozhucy.cnmain函数的第三个参数envp-CSDN博客​blog.csdn.netflagencode一般都在check函数里

参考:

Calling Convention​mozhucy.cnmain函数的第三个参数envp - CSDN博客​blog.csdn.net
flagencode一般都在check函数里

@MozhuCY 这个人说的

int check()
{signed int i; // [rsp&#43;Ch] [rbp-F4h]int v2[58]; // [rsp&#43;10h] [rbp-F0h]memcpy(v2, &unk_100000ED0, 0xE0uLL);for ( i &#61; 0; i <56; &#43;&#43;i ){if ( input[i] !&#61; v2[i] ){puts((const char *)err);exit(0);}}return puts(success);
}

点开&unk_100000ED0这个地址能看到的数组的那块内存,能看出来int型是4字节

96c883401822d299b65b497e789df1fd.png

主体部分挺明显的,先对整体异或,再局部异或

flag &#61; &#39;&#39;
input &#61; [21, 31, 18, 20, 8,58, 70, 44, 7, 27, 81, 19, 63, 87, 8,5, 63, 48, 50, 81,82, 2, 110, 120,22,124,110,97,112,72,28,59,50,42,19,69,7,42,24,12,110,65,112,4,6,110,92,66,69,112,90,2,4,14,76]
for i in range(54):input[i] ^&#61; 0xDEif i <10:input[i] ^&#61; 0xADelif i >&#61; 10 and i <20:input[i] ^&#61; 0xBEelif i >&#61; 20 and i <30:input[i] ^&#61; 0xEFelif i >&#61; 30 and i <40:input[i] ^&#61; 0xABelse:input[i] ^&#61; 0xEF
for i in range(54):flag &#43;&#61; chr(input[i])
print(flag)


补充一个hello world的反编译情况

int __cdecl main(int argc, const char **argv, const char **envp)
{printf("hello world", argv, envp);return 0;
}

cdecl是函数调用约定,即对函数调用时如何传递参数的一种约定

函数参数按照从右到左的顺序入栈&#xff0c;并且由调用函数者把参数弹出栈以清理堆栈

Main函数的几种常见形式

int main(void)int main(int argc, char * argv[])int main(int argc, char * argv[], char * envp[])

  • 第一种形式也就是常见的,main不接受参数
  • 第二种通过shell调用程序argc表示参数的个数,argv为参数的内容,突然想起了JS里的arguments对象hhh

test(int a,int b) -> argv[0] &#61; a, argv[1] &#61; b

确实和arguments很像

  • 第三种的envp是获取运行系统的环境变量,操作系统运行程序时通过envp 参数将系统环境变量传递给程序

(C语言的输出有点麻烦,用cpp的cout方便一点)

#include
using namespace std;
int main(int agrc, char *argv[], char *envp[])
{for (int i &#61; 0; envp[i]; &#43;&#43;i){cout <}/*
AUTOJUMP_ERROR_PATH&#61;/Users/yellowDog/Library/autojump/errors.log
AUTOJUMP_SOURCED&#61;1
SHELL&#61;/bin/zsh
AMD_ENTRYPOINT&#61;vs/workbench/node/extensionHostProcess
HOMEBREW_BOTTLE_DOMAIN&#61;https://mirrors.ustc.edu.cn/homebrew-bottles
TMPDIR&#61;/var/folders/5_/0ypb1jdj255_pd680fygpmnm0000gn/T/
Apple_PubSub_Socket_Render&#61;/private/tmp/com.apple.launchd.pxZlD1M9R2/Render
OLDPWD&#61;/Users/yellowDog/demo
*/




推荐阅读
  • 编译原理c语言词法分析器,用C语言实现一个真正的词法分析器
    词法分析,是编译器的第一个模块,也是最简单的模块。最简单,指的是相对于编译器这种大型程序而言,与一般的代码相比还是有点复杂的 ... [详细]
  • 上次我们总结了React代码构建后的webpack模块组织关系,今天来介绍一下Babel编译JSX生成目标代码的一些规则,并且写一个简单的解析器,模拟整个生成的过程。我们还是拿最简 ... [详细]
  • C语言宏定义容易认不清的盲区梳理_C 语言
    宏定义是C提供的三种预处理(宏定义、文件包含、条件编译)的其中一种,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度 ... [详细]
  • c语言自定义BOOL函数C语言没有BOOL类型变量boolean类型是C++所独有的由于使用BOOL类型可以使代码更具有可读性,很多编程者都在C中自己定义了类似的应用,一般方法有两 ... [详细]
  • 九宫格计算. ... [详细]
  • 题目描述输入整型数组和排序标识,对其元素按照升序或降序进行排序(一组测试用例可能会有多组数据)本题有多组输入,请使用whil ... [详细]
  • 这篇文章将为大家详细讲解有关C#开发技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C#开发技 ... [详细]
  • PIMPL 是 C++ 中的一个编程技巧,意思为指向实现的指针。具体操作是把类的实现细节放到一个单独的类中,并用一个指针进行访问 ... [详细]
  •  很好的博客:https:blog.csdn.netqq_39809664articledetails79934516可持久化数组#include#inclu ... [详细]
  • 贴图的支持及设置:关于贴图分辨率的支持及设置的用户指南
    http:hi.baidu.comdbfr2011818itemeef1eac8df31a2d69744520b贴图分辨率虚幻引擎3支持的贴图分辨率是从1x1到4096x4096 ... [详细]
  • Linux提权之suid篇
    Linux提权之suid篇不知攻,焉知防一个在安服路上摸索的大三生,记录平时学习笔记suid前言:1.只有可以执行的二进制程序文件才 ... [详细]
  • IDEA实用插件Lombok
    LombokLombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。通常,我们所定义的对象和b ... [详细]
  • 下面是一个用openssl实现获取https网页内容的demo,整个流程比较简单,主要封装的API如下staticinthttps_init(http ... [详细]
  • 《How Tomcat Works》读书笔记(四)Tomcat Default Connector
    为什么80%的码农都做不了架构师?上节《HowTomcatWorks》读书笔记(三),只是讲了一个简单的connect ... [详细]
  • 一、域名解析记录说明记录类型A:用来指定域名的IPv4地址(如:8.8.8.8),如果需要将域名指向一个IP ... [详细]
author-avatar
JRamboKing
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有