跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 在 arm cpu 中如何做到访问一个无效地址时程序不崩溃
未分類
25 10 月 2020

在 arm cpu 中如何做到访问一个无效地址时程序不崩溃

在 arm cpu 中如何做到访问一个无效地址时程序不崩溃

資深大佬 : zengming00 7

有一个特殊的需求需要根据一个寄存器的值来读一片内存

而寄存器的值是不确定的,这就会有可能导致访问了无效的内存地址

比如

char*a = r9; // r9 寄存器的值 if(a){  printf("%c", *a); } 

判断 a 是不是空指针是最简单的,但如果 a 指向 0xFFFFFFFF 就不行了程序就会崩溃

有没有什么办法使这样无效的内存地址访问也能正常运行,c 语言做不到的话汇编也行

大佬有話說 (7)

  • 資深大佬 : codehz

    哈,你怎么知道指向的是有效地址,但是并不符合预期的呢

  • 資深大佬 : ryd994

    用户态就别想了,内核的话不怕死的可以魔改内存管理。
    然后,不知道哪来的指针你也敢用?
    很明显你不知道自己要干什么
    不如说说原始问题吧

  • 資深大佬 : kyonn

    问题本身就是矛盾的。低级语言本身就要求使用者保证地址有效性。
    所以建议按照 2L 建议,讲你原始的需求。

  • 資深大佬 : billlee

    用户态下,SIGSEGV 是可以安装 handler 的。

  • 主 資深大佬 : zengming00

    那如何知道有效地址的范围呢?

  • 資深大佬 : BingoXuan

    你需要先做 cdma buf 约束可读数据区域,再根据寄存器的值读取 cdma buf 的数据。如果你这样随便来,读出啥谁也保证不了。

  • 主 資深大佬 : zengming00

    @BingoXuan 不用保证什么的,我的设想是根据 r9 寄存器的值,然后做一些加减运算得到的值再去获取内存里面这个地址的值,得到的内存里面的数据到底是什么并不重要,因为最后只是与 r9 对比是不是同一个值就行了
    现在的问题就是 r9 的值不确定,算出来的地址也就不确定,就有可能指向无效的内存地址导致程序崩溃,不知道如何获取一个有效的地址范围来做判断,也不知道有没有办法让我获取无效地址时程序不崩溃

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具