我正在 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) 我目前正在费力地阅读 ARMv7 内核的 ARM 架构手册。在关于内存访问原子性的章节 A3.5.3 中,它指出:
如果单副本原子加载与单副本原子存储重叠,并且对于任何重叠字节,加载返回由单副本原子存储插入到该字节的一致性顺序中的写入写入的数据,则加载必须返回来自一致性顺序中的某个点的数据不早于由所有重叠字节的单副本原子存储插入一致性顺序的写入。
作为非英语母语人士,我承认我在理解这句话时遇到了一些挑战。
是否存在对内存字节的写入未插入一致性顺序因此上述情况不适用的情况?如果不是,我的说法是否正确,将句子缩短并改写为以下内容:
如果加载恰好返回写入的至少一个字节,则加载必须从不早于写入将它们插入所有重叠字节的一致性顺序的点返回所有重叠字节。
仍然传达相同的含义吗?
是什么原因Cortex-M3的初始堆栈指针值位于0x0,复位处理程序位于0x4?这个的设计理由是什么?
为什么ARM人员不能像重置处理器那样将0x0留给重置处理程序,然后在重置处理程序内初始化SP?
首先,我进行了(很多)搜索,我对我的 Android 架构感到困惑。
我使用的主要方法有:
uname -m命令表明我正在使用armv8l.dpkg --print-architecture命令说我正在使用armlscpu了这个输出:~ $ 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) 在为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
我正在查看ARM Cortex A53 处理器的维基百科页面。该处理器的功能列表包括术语hardware virtualization。我想问一下有人知道这包括哪些功能列表吗?它与 分开列出Trustzone,因此我假设它指示与 TEE 无关的功能。
我试图通过编写同样的霓虹内在函数来击败"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.
如果是,那么我的代码如何给出这些结果.是对还是错
Cortex-A53 处理器有 1 到 4 个内核,每个内核都有一个 L1 内存系统和一个共享的 L2 缓存。