逆向-beginners之结构体-成员地址访问

#include <stdio.h>
#include <time.h>

/*
 * 字节型数组
 */

int main()
{
    struct tm t;
    time_t unix_time;
    int i=0, j=0;

    unix_time = time(NULL);

    localtime_r(&unix_time, &t);

    for (i = 0; i < 9; i++) {
        for (j = 0; j < 4; j++)
            printf("0x%02X ", ((unsigned char *)&t)[i*4+j]);
        
        printf("\n");
    }

    return 0;
}

#if 0
/*
 * intel
 */
00000000000011c9 <main>:
    11c9:    f3 0f 1e fa              endbr64 
    11cd:    55                       push   %rbp
    11ce:    48 89 e5                 mov    %rsp,%rbp
    11d1:    48 83 ec 50              sub    $0x50,%rsp
    11d5:    64 48 8b 04 25 28 00     mov    %fs:0x28,%rax
    11dc:    00 00 
    11de:    48 89 45 f8              mov    %rax,-0x8(%rbp)
    11e2:    31 c0                    xor    %eax,%eax
    11e4:    c7 45 b0 00 00 00 00     movl   $0x0,-0x50(%rbp)
    11eb:    c7 45 b4 00 00 00 00     movl   $0x0,-0x4c(%rbp)
    11f2:    bf 00 00 00 00           mov    $0x0,%edi
    11f7:    e8 d4 fe ff ff           callq  10d0 <time@plt>
    11fc:    48 89 45 b8              mov    %rax,-0x48(%rbp)
    1200:    48 8d 55 c0              lea    -0x40(%rbp),%rdx
    1204:    48 8d 45 b8              lea    -0x48(%rbp),%rax
    1208:    48 89 d6                 mov    %rdx,%rsi
    120b:    48 89 c7                 mov    %rax,%rdi
    120e:    e8 8d fe ff ff           callq  10a0 <localtime_r@plt>
    1213:    c7 45 b0 00 00 00 00     movl   $0x0,-0x50(%rbp)        // x=0
    121a:    eb 52                    jmp    126e <main+0xa5>        // for x
    121c:    c7 45 b4 00 00 00 00     movl   $0x0,-0x4c(%rbp)        // y=0
    1223:    eb 35                    jmp    125a <main+0x91>        // for y
    1225:    8b 45 b0                 mov    -0x50(%rbp),%eax
    1228:    8d 14 85 00 00 00 00     lea    0x0(,%rax,4),%edx    // edx=x*4+0x0
    122f:    8b 45 b4                 mov    -0x4c(%rbp),%eax        // eax=y
    1232:    01 d0                    add    %edx,%eax            
    1234:    48 98                    cltq                        // rax=y+x*4
    1236:    48 8d 55 c0              lea    -0x40(%rbp),%rdx        // rdx=rbp-0x40
    123a:    48 01 d0                 add    %rdx,%rax            // rax=rbp-0x40+x*4+y
    123d:    0f b6 00                 movzbl (%rax),%eax            // eax=(rbp-0x40+x*4+y)
    1240:    0f b6 c0                 movzbl %al,%eax                // eax=al
    1243:    89 c6                    mov    %eax,%esi
    1245:    48 8d 3d b8 0d 00 00     lea    0xdb8(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>
    124c:    b8 00 00 00 00           mov    $0x0,%eax
    1251:    e8 6a fe ff ff           callq  10c0 <printf@plt>    
    1256:    83 45 b4 01              addl   $0x1,-0x4c(%rbp)        // y++
    125a:    83 7d b4 03              cmpl   $0x3,-0x4c(%rbp)        // y-0x3
    125e:    7e c5                    jle    1225 <main+0x5c>        // for y
    1260:    bf 0a 00 00 00           mov    $0xa,%edi
    1265:    e8 26 fe ff ff           callq  1090 <putchar@plt>
    126a:    83 45 b0 01              addl   $0x1,-0x50(%rbp)        // x++
    126e:    83 7d b0 08              cmpl   $0x8,-0x50(%rbp)        // x-0x8
    1272:    7e a8                    jle    121c <main+0x53>        // for x
    1274:    b8 00 00 00 00           mov    $0x0,%eax
    1279:    48 8b 4d f8              mov    -0x8(%rbp),%rcx
    127d:    64 48 33 0c 25 28 00     xor    %fs:0x28,%rcx
    1284:    00 00 
    1286:    74 05                    je     128d <main+0xc4>
    1288:    e8 23 fe ff ff           callq  10b0 <__stack_chk_fail@plt>
    128d:    c9                       leaveq 
    128e:    c3                       retq   
    128f:    90                       nop

/*
 * arm
 */
000000000040064c <main>:
  40064c:    a9ba7bfd     stp    x29, x30, [sp, #-96]!
  400650:    910003fd     mov    x29, sp
  400654:    b9005fbf     str    wzr, [x29, #92]
  400658:    b9005bbf     str    wzr, [x29, #88]
  40065c:    d2800000     mov    x0, #0x0                       // #0
  400660:    97ffffa4     bl    4004f0 <time@plt>
  400664:    f9000fa0     str    x0, [x29, #24]
  400668:    910083a1     add    x1, x29, #0x20
  40066c:    910063a0     add    x0, x29, #0x18
  400670:    97ffff9c     bl    4004e0 <localtime_r@plt>
  400674:    b9005fbf     str    wzr, [x29, #92]
  400678:    1400001a     b    4006e0 <main+0x94>
  40067c:    b9005bbf     str    wzr, [x29, #88]
  400680:    14000010     b    4006c0 <main+0x74>
  400684:    b9405fa0     ldr    w0, [x29, #92]
  400688:    531e7401     lsl    w1, w0, #2
  40068c:    b9405ba0     ldr    w0, [x29, #88]
  400690:    0b000020     add    w0, w1, w0
  400694:    93407c00     sxtw    x0, w0
  400698:    910083a1     add    x1, x29, #0x20
  40069c:    8b000020     add    x0, x1, x0
  4006a0:    39400000     ldrb    w0, [x0]
  4006a4:    2a0003e1     mov    w1, w0
  4006a8:    90000000     adrp    x0, 400000 <_init-0x4a8>
  4006ac:    911ea000     add    x0, x0, #0x7a8
  4006b0:    97ffffa0     bl    400530 <printf@plt>
  4006b4:    b9405ba0     ldr    w0, [x29, #88]
  4006b8:    11000400     add    w0, w0, #0x1
  4006bc:    b9005ba0     str    w0, [x29, #88]
  4006c0:    b9405ba0     ldr    w0, [x29, #88]
  4006c4:    71000c1f     cmp    w0, #0x3
  4006c8:    54fffded     b.le    400684 <main+0x38>
  4006cc:    52800140     mov    w0, #0xa                       // #10
  4006d0:    97ffff9c     bl    400540 <putchar@plt>
  4006d4:    b9405fa0     ldr    w0, [x29, #92]
  4006d8:    11000400     add    w0, w0, #0x1
  4006dc:    b9005fa0     str    w0, [x29, #92]
  4006e0:    b9405fa0     ldr    w0, [x29, #92]
  4006e4:    7100201f     cmp    w0, #0x8
  4006e8:    54fffcad     b.le    40067c <main+0x30>
  4006ec:    52800000     mov    w0, #0x0                       // #0
  4006f0:    a8c67bfd     ldp    x29, x30, [sp], #96
  4006f4:    d65f03c0     ret

#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很抱歉,我是一名AI语言模型,无法进行安装操作。但是,我可以提供一些安装ROS Academy for Beginners的指导: 1. 首先,确保你的计算机已经安装了ROS(Robot Operating System)。 2. 在终端中输入以下命令,下载ROS Academy for Beginners: ``` git clone https://github.com/qboticslabs/ros-academy-for-beginners.git ``` 3. 进入下载的文件夹: ``` cd ros-academy-for-beginners ``` 4. 运行安装脚本: ``` ./install.sh ``` 5. 安装完成后,你可以在终端中输入以下命令,启动ROS Academy for Beginners: ``` roslaunch academy academy.launch ``` 希望这些指导能够帮助你安装ROS Academy for Beginners。如果你遇到了任何问题,可以在ROS社区中寻求帮助。 ### 回答2: 首先,安装ROS的前提是已经安装好了Ubuntu操作系统,推荐使用Ubuntu 18.04。可以从Ubuntu的官网上下载系统镜像并且安装。 其次,在安装ROS之前,需要先添加ROS的软件源,这里以Melodic版本为例。打开终端,输入以下命令,添加ROS的软件源: ``` sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' ``` 由于ROS的安装需要与ubuntu操作系统的软件进行整合,为了确保最佳匹配,需要先运行以下命令进行更新: ``` sudo apt update sudo apt upgrade ``` 然后是ROS的安装,运行以下命令: ``` sudo apt install ros-melodic-desktop-full ``` 该命令会安装ROS桌面完整版,其中包含许多常用的软件包和工具。安装完成后,可以通过以下命令检查ROS的版本: ``` rosversion -d ``` 接下来,还需配置ROS环境变量。在终端中输入: ``` echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc ``` 安装ROS的最后一步是安装ROS初始工作区(catkin工作区)。打开终端,输入以下命令: ``` mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make ``` 这个命令创建一个名为catkin_ws的文件夹,并在其中创建一个src文件夹,用于存放ROS软件包源代码。 最后,我们可以安装ros-academy-for-beginners这个包,这个包可以用于学习ROS的基础知识,包括ROS的概念、练习和示例等等。在终端输入以下命令: ``` cd ~/catkin_ws/src git clone https://github.com/OTL/ros-academy-for-beginners.git cd ~/catkin_ws catkin_make ``` 至此,ros-academy-for-beginners的安装就完成了。如果想要使用该软件包内的示例和练习程序,可以查看ros-academy-for-beginners中的README文件,然后通过以下命令运行: ``` roslaunch ros_academy_publisher publisher.launch ``` ### 回答3: ROS(机器人操作系统)是一种流行的开源软件框架,它可以帮助开发人员为机器人软件构建底层、中间层、以及可视化的应用程序。ROS Academy for Beginners是一个为初学者提供ROS学习和实践的平台,这个平台包含了一系列的教程,如基础知识、机器人操作、感知和导航等。 在安装ROS Academy for Beginners之前,首先需要准备以下工具: 1. 一个ROS Kinetic(或更高版本)的Ubuntu操作系统。 2. 一个支持VirtualBox或VMware的虚拟机管理软件。 3. 一个ROS学习环境的Ubuntu虚拟机镜像文件。 下面是安装ROS Academy for Beginners的步骤: 1. 在VirtualBox(或其他虚拟机软件)中创建一台新的虚拟机。请确保选择Ubuntu x64的版本。 2. 启动Ubuntu虚拟机,并使用管理员权限运行Terminal。 3. 输入以下命令,添加ROS Kinetic的存储库以及密钥: $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' $ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 4. 更新存储库并安装ROS Kinetic Desktop Full: $ sudo apt-get update $ sudo apt-get install ros-kinetic-desktop-full 5. 安装ROS依赖项: $ sudo apt-get install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential 6. 初始化rosdep: $ sudo rosdep init $ rosdep update 7. 设置ROS环境变量: $ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc $ source ~/.bashrc 8. 下载ROS Academy for Beginners虚拟机镜像: $ wget https://s3-us-west-2.amazonaws.com/ros-academy/ROS-Academy-For-Beginners.ova 9. 启动VirtualBox软件,选择“File” -> “Import Appliance”,并选择已下载的ROS Academy for Beginners虚拟机镜像文件。 10. 等待虚拟机导入完成后,启动ROS Academy for Beginners虚拟机,并按照教程开始学习ROS! 希望这些步骤可以帮助您安装ROS Academy for Beginners。如果您在安装过程中遇到任何问题,请参考ROS官方文档或社区论坛,寻求帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值