标签: cortex-a

ARM 上的面向返回编程(64 位)

我正在 ARM(64 位)上学习 Rop。所以我正在我的 ARMv8 Cortex A-72 上测试 Rop 漏洞,以了解它是如何在 Arm64 上工作的。我写了一个非常简单的c易受攻击的代码:

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

void win(unsigned magic){
    if(magic == 0xdeadbeef)
        printf("I Should Never be Called!\n");
}

void vuln(){
    char buffer[80];
    printf("Buffer at:%p\n",buffer);
    gets(buffer);
}

int main(int argc, char **argv){

    vuln(); 
}
Run Code Online (Sandbox Code Playgroud)

为了调用 win 函数,我认为正确的 rop 链是:

offset + pop {x0,pc} + correct_argument + win_address
Run Code Online (Sandbox Code Playgroud)

这是汇编代码:

Dump of assembler code for function main:

   0x00000055555557f8 <+0>:     stp     x29, x30, [sp, #-32]!
   0x00000055555557fc <+4>:     mov     x29, sp
   0x0000005555555800 <+8>:     str     w0, …
Run Code Online (Sandbox Code Playgroud)

security assembly arm64 cortex-a armv8

4
推荐指数
1
解决办法
129
查看次数

ARM 单拷贝原子性

我目前正在费力地阅读 ARMv7 内核的 ARM 架构手册。在关于内存访问原子性的章节 A3.5.3 中,它指出:

如果单副本原子加载与单副本原子存储重叠,并且对于任何重叠字节,加载返回由单副本原子存储插入到该字节的一致性顺序中的写入写入的数据,则加载必须返回来自一致性顺序中的某个点的数据不早于由所有重叠字节的单副本原子存储插入一致性顺序的写入。

作为非英语母语人士,我承认我在理解这句话时遇到了一些挑战。

是否存在对内存字节的写入未插入一致性顺序因此上述情况不适用的情况?如果不是,我的说法是否正确,将句子缩短并改写为以下内容:

如果加载恰好返回写入的至少一个字节,则加载必须从不早于写入将它们插入所有重叠字节的一致性顺序的点返回所有重叠字节。

仍然传达相同的含义吗?

memory arm atomic cortex-a

3
推荐指数
1
解决办法
4613
查看次数

为什么复位处理程序位于Cortex-A的0x0而不是Cortex-M3

是什么原因Cortex-M3的初始堆栈指针值位于0x0,复位处理程序位于0x4?这个的设计理由是什么?

为什么ARM人员不能像重置处理器那样将0x0留给重置处理程序,然后在重置处理程序内初始化SP?

microcontroller arm cortex-m3 cortex-a

3
推荐指数
1
解决办法
1097
查看次数

我的架构是什么?armv8l 到底意味着什么?

首先,我进行了(很多)搜索,我对我的 Android 架构感到困惑。

我使用的主要方法有:

  1. uname -m命令表明我正在使用armv8l.
  2. dpkg --print-architecture命令说我正在使用arm
  3. 显示lscpu了这个输出:
~ $ lscpu
Architecture:           armv8l
Byte Order:             Little Endian
CPU(s):                 8
On-line CPU(s) list:    0-3
Off-line CPU(s) list:   4-7
Vendor ID:              ARM
Model name:             Cortex-A53                                              Model:                  4
Thread(s) per core:     1
Core(s) per socket:     4
Socket(s):              1
Stepping:               r0p4
CPU(s) scaling MHz:     79%
CPU max MHz:            1586.0000
CPU min MHz:            0.0000
Flags:                  half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 id …
Run Code Online (Sandbox Code Playgroud)

architecture android arm arm7 cortex-a

3
推荐指数
1
解决办法
9983
查看次数

使用yocto配方安装库

在为yocto创建配方时遇到一些问题.更具体地说,我必须从git安装一个通常安装如下的库:

./bootstrap
./configure --sysconfdir=/etc
make
sudo make install
Run Code Online (Sandbox Code Playgroud)

我的问题是如何将其添加到配方函数do_configure,do_compile,do_install.没有在网上找到太多的信息或例子.

更新1:

这是我想要集成到yocto中的库 https://github.com/NXPNFCLinux/linux_libnfc-nci

linux filesystems recipe cortex-a yocto

2
推荐指数
1
解决办法
1193
查看次数

ARM Cortex A53 - 硬件虚拟化功能

我正在查看ARM Cortex A53 处理器的维基百科页面。该处理器的功能列表包括术语hardware virtualization。我想问一下有人知道这包括哪些功能列表吗?它与 分开列出Trustzone,因此我假设它指示与 TEE 无关的功能。

arm cortex-a

2
推荐指数
1
解决办法
2926
查看次数

用neon intrinsics替换memcpy

我试图通过编写同样的霓虹内在函数来击败"memcpy"函数.以下是我的逻辑:

uint8_t* m_input;  //Size as 400 x300
uint8_t* m_output; //Size as 400 x300
//not mentioning the complete code base for memory creat 

memcpy(m_output, m_input, sizeof(m_output[0]) * 300* 400);
Run Code Online (Sandbox Code Playgroud)

氖:

int32_t ht_index,wd_index;
uint8x16_t vector8x16_image;

for(int32_t htI =0;htI < m_roiHeight;htI++){
    ht_index = htI * m_roiWidth ;

    for(int32_t wdI = 0;wdI < m_roiWidth;wdI+=16){
        wd_index = ht_index + wdI;
        vector8x16_image = vld1q_u8(m_input);

        vst1q_u8(&m_output[wd_index],vector8x16_image);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在imx6硬件上多次验证了这些结果.

结果:

Memcpy :0.039 milisec
neon memcpy: 0.02841 milisec
Run Code Online (Sandbox Code Playgroud)

我读了一些没有预先说明的说明,我们不能打败MEMCPY.

如果是,那么我的代码如何给出这些结果.是对还是错

arm simd neon cortex-a

0
推荐指数
1
解决办法
1279
查看次数

cortex-A53 中 L1 和 L2 缓存的写入策略是什么?

Cortex-A53 处理器有 1 到 4 个内核,每个内核都有一个 L1 内存系统和一个共享的 L2 缓存。

arm cpu-architecture cpu-cache cortex-a

-4
推荐指数
1
解决办法
1002
查看次数