逆向-beginners之goto

#include <stdio.h>

int main()
{
    printf("begin.\n");
    goto exit;
    printf("skip me!\n");

exit:
    printf("end\n");
}

#if 0

某些情况下还必须使用这种语句

goto直接编译成了JMP。这两个指令的效果完全相同:无条件的转移到程序中的另一个地方继续执行后续命令。

只有在人工干预的情况下,例如使用调试器调整程序、或者对程序打补丁的情况下,程序才会调用第二个printf。

/*
 * dead code
 */
    第二次printf的代码称为"无用代码/dead code"。无用代码永远不会被执行。
    启用编译优化,会删除得干干净净。


#endif

#if 0
/*
 * intel
 */
0000000000001149 <main>:
    1149:    f3 0f 1e fa              endbr64 
    114d:    55                       push   %rbp
    114e:    48 89 e5                 mov    %rsp,%rbp
    1151:    48 8d 3d ac 0e 00 00     lea    0xeac(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>
    1158:    e8 f3 fe ff ff           callq  1050 <puts@plt>
    115d:    90                       nop
    115e:    f3 0f 1e fa              endbr64 
    1162:    48 8d 3d a2 0e 00 00     lea    0xea2(%rip),%rdi        # 200b <_IO_stdin_used+0xb>
    1169:    e8 e2 fe ff ff           callq  1050 <puts@plt>
    116e:    b8 00 00 00 00           mov    $0x0,%eax
    1173:    5d                       pop    %rbp
    1174:    c3                       retq   
    1175:    66 2e 0f 1f 84 00 00     nopw   %cs:0x0(%rax,%rax,1)
    117c:    00 00 00 
    117f:    90                       nop

/*
 * arm
 */
000000000040055c <main>:
  40055c:    a9bf7bfd     stp    x29, x30, [sp, #-16]!
  400560:    910003fd     mov    x29, sp
  400564:    90000000     adrp    x0, 400000 <_init-0x3e8>
  400568:    91190000     add    x0, x0, #0x640
  40056c:    97ffffb9     bl    400450 <puts@plt>
  400570:    d503201f     nop
  400574:    90000000     adrp    x0, 400000 <_init-0x3e8>
  400578:    91192000     add    x0, x0, #0x648
  40057c:    97ffffb5     bl    400450 <puts@plt>
  400580:    52800000     mov    w0, #0x0                       // #0
  400584:    a8c17bfd     ldp    x29, x30, [sp], #16
  400588:    d65f03c0     ret
  40058c:    00000000     .inst    0x00000000 ; undefined


#endif
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/81360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK17特性

文章目录 一、JAVA17概述二、语法层面的变化1.密封类2.switch模式匹配&#xff08;预览&#xff09; 三、API层面变化1.Vector API&#xff08;第二个孵化器&#xff09;2.特定于上下文的反序列化过滤器 四、其他变化1.恢复始终严格的浮点语义2.JEP 增强型伪随机数生成器3.JEP …

Linux命令:free命令

目录 一、简介二、free -h1、free列和available列的区别2、swap空间 三、free -h -s 2 -c 2 一、简介 free 命令可以显示Linux系统中 空闲的、已用的物理内存 及 swap内存,及 被内核使用的buffer。在Linux系统监控的工具中&#xff0c;free命令是最经常使用的命令之一。 free…

C++库函数——map与set

目录 1.关联式容器是什么&#xff1f; 2.键值对 3.set ①set的介绍 ②set的模板参数列表 ③set的构造 ④set的迭代器 ⑤set的容量 ⑥set的修改与操作 ⑦set的使用举例 4.multiset ①multiset的介绍 ②multiset的使用举例 5.map ①map的介绍 ②map的模版参数列表…

HuggingFace Transformer

NLP简介 HuggingFace简介 hugging face在NLP领域最出名&#xff0c;其提供的模型大多都是基于Transformer的。为了易用性&#xff0c;Hugging Face还为用户提供了以下几个项目&#xff1a; Transformers(github, 官方文档): Transformers提供了上千个预训练好的模型可以用于不…

关于不停机发布新版本程序的方式

“不停机发布新版本程序”&#xff0c;暂且这么称呼吧&#xff0c;其实就是所说的滚动发布、灰度发布、金丝雀发布和蓝绿发布。 之所以会总结性地提一下这几个概念&#xff0c;主要是本次出门游历&#xff0c;流浪到了乌兰察布市四王子旗&#xff0c;在这儿遇上了个有趣儿的家伙…

目标检测YOLO实战应用案例100讲-基于单阶段网络的小目标检测

目录 前言 目标检测的研究现状 小目标检测的研究现状

基于讯飞人脸算法(调用API进行人脸比对)

先看结果 必须遥遥领先 所需准备 这里我调用了&#xff1a; 人脸比对 API 文档 | 讯飞开放平台文档中心https://www.xfyun.cn/doc/face/xffaceComparisonRecg/API.html#%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E 代码里所涉及的APPID、APISecret、APIKey 皆从讯飞的控制台获取&…

市场,只能被操纵,不能被战胜

所谓市场&#xff0c;不过是千千万参与主体各自独立意志、自主行动所形成的复杂混沌的互动结果。价格&#xff0c;则是这一复杂混沌系统的涌现现象。 无数在市场中追风打浪的人&#xff0c;总是梦想着自己有朝一日能够战胜市场&#xff0c;获得超额回报。于是他们绞尽脑汁&…

Mybatis学习笔记3 在Web中应用Mybatis

Mybatis学习笔记2 增删改查及核心配置文件详解_biubiubiu0706的博客-CSDN博客 技术栈:HTMLServletMybatis 学习目标: 掌握mybatis在web应用中如何使用 Mybatis三大对对象的作用域和生命周期 关于Mybatis中三大对象的作用域和生命周期、 官网说明 ThreadLocal原理及使用 巩…

QT基础教程(QMap和QHash)

文章目录 前言一、QMap二、QHash三、QMap和QHash实际运用 总结 前言 本篇文章将为大家讲解QT中两个非常重要的类&#xff1a;QMap和QHash。 QMap和QHash都是Qt框架中用于存储键值对的数据结构&#xff0c;它们提供了快速的查找、插入和删除操作&#xff0c;但在某些方面有一些…

cherry-pick

要将dev分支的某次提交给master分支&#xff0c;可以使用以下命令&#xff1a; 1. 切换到dev分支&#xff1a;git checkout dev 2. 查看提交历史&#xff0c;找到要提交给master的某次提交的commit hash&#xff08;假设为 <commit_hash>&#xff09; 3. 切换到master…

前端加密和解密

Base64加密&#xff1a; 加密&#xff1a;Base64.encode(); Base64.encode(); 解密&#xff1a;Base64.decode(); Base64.decode(); url携带参数加密&#xff1a; 加密&#xff1a;encodeURLComponent(); encodeURLComponent(); 解密&#xff1a;decodeURLComponent(); …

[软考中级]软件设计师-知识产权

考查 有2-3题&#xff0c;题号可能在10和12 著作权 也称为版权&#xff0c;只作者对其创作的作品享有的人身权和财产权 人身权包括发表权&#xff0c;署名权&#xff0c;修改权和保护作品完整权&#xff0c;其他权利均为财产权 我国发表权保护期为作者终生及其死亡后的50年…

HttpUtils带连接池

准备祖传了&#xff0c;有问题欢迎大家指正。 HttpUtil import com.txlc.cloud.commons.exception.ServiceException; import com.txlc.dwh.common.constants.MyErrorCode; import org.ssssssss.script.annotation.Comment;import java.io.UnsupportedEncodingException; impo…

JAVA入坑之嵌套类

一、嵌套类入门 1.1概述 Java嵌套类是指在一个类中定义另一个类的一种方式&#xff0c;它可以提高代码的可读性、可维护性和封装性。Java嵌套类分为两种类型&#xff1a;静态嵌套类和非静态嵌套类。 静态嵌套类&#xff1a;Static nested classes,即类前面有static修饰符 非静…

【论文解读】Faster sorting algorithm

一、简要介绍 基本的算法&#xff0c;如排序或哈希&#xff0c;在任何一天都被使用数万亿次。随着对计算需求的增长&#xff0c;这些算法的性能变得至关重要。尽管在过去的2年中已经取得了显著的进展&#xff0c;但进一步改进这些现有的算法路线的有效性对人类科学家和计算方法…

Prometheus PromQL数据查询语言

PromQL 简介 PromQL&#xff08;Prometheus Query Language&#xff09;是 Prometheus 内置的数据查询语言。支持用户进行实时的数据查询及聚合操作。 Prometheus 基于指标名称&#xff08;metrics name&#xff09;以及附属的标签集&#xff08;labelset&#xff09;唯一定义一…

2023-09-17 LeetCode每日一题(打家劫舍 II)

2023-09-17每日一题 一、题目编号 213. 打家劫舍 II二、题目链接 点击跳转到题目位置 三、题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房…

《golang设计模式》第二部分·结构型模式-05-门面模式Facade)

文章目录 1. 概述1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.2 类图 1. 概述 门面&#xff08;Facade&#xff09;向客户端提供使用子系统的统一接口&#xff0c;用于简化客户端使用子系统的操作。 1.1 角色 门面角色&#xff08;Facade&#xff09; 客户端可以调用的接…

svg图片代码data:image/svg+xml转png图片方法

把代码保存为html格式的文件中,用浏览器访问,即可右键保存 从AI软件或其它网站得到svg图片代码后,把他复制到下面源码上 注意:src""图片地址中,一些参数的含义 d‘这里是图片代码数据’ viewBox是图片显示区域,宽,高等 fill%23000000’这里表示颜色 ,后面6位0表示黑色…