安卓逆向_13 --- AndroidStudio + Smalidea 动态调试 smali 代码【APK可调试】、gradle 配置

教我兄弟学Android逆向04 动态调试smali代码:https://www.52pojie.cn/thread-658865-1-1.html

From:Android Studio 3.6 调试 smali:https://blog.csdn.net/jha334201553/article/details/104494732
From:Smalidea+IntelliJ IDEA/Android Studio无源码调试:https://bbs.pediy.com/thread-220743.htm
From:反编译之利用AndroidStudio动态调试smali源码:https://juejin.im/post/5c14622be51d4556c90be796
From:Android Studio动态调试smail源码:https://blog.csdn.net/hp910315/article/details/52790740

smalidea 插件 github 地址:https://github.com/JesusFreke/smalidea
Android Studio Smali 调试:https://www.jianshu.com/p/b9312b056d15
Android调试系列—使用android studio调试smali代码:https://www.cnblogs.com/gordon0918/p/5570811.html
Android Studio动态调试smali:https://zhuanlan.zhihu.com/p/85469186
AndroidStudio+ideasmali动态调试smali汇编:https://www.cnblogs.com/lanrenxinxin/p/4891424.html
Android Studio + smalidea进行smail动态调试:https://blog.csdn.net/u013736724/article/details/53292855
微信 APP 调试方法 AndroidStudio3.2 + smalidea + Xposed + BDOpen:http://www.bloguan.com/?id=518

前言

Android studio 配置

  • Android Studio 配置(一):https://www.cnblogs.com/qianguyihao/p/4390905.html
  • Android Studio 配置(二):https://www.cnblogs.com/qianguyihao/p/4392611.html
  • Android Studio 配置(三):gradle项目构建:https://www.cnblogs.com/xiaofengfeng/p/9133043.html

在安装 Android Studio之前,建议先提前准备好单独的 Android SDK,这个可以在http://www.androiddevtools.cn/ 网站下载。Android Studio 安装完成后,第一次启动 AS 前,为了避免重新下载新版本的SDK,需要做如下操作:AS启动前,打开安装目录,请先将bin目录的idea.properties 文件中增加一行:disable.android.first.run=true 就行了,避免第一次打开AS时自动重新下载 SDK。mac 平台的右键安装包->Show Package Contents 就找到bin目录了。

第一次打开 Android Studio 时,需要配置JDK和SDK:

上图中,选择“Project Structure”,弹出如下界面:(选择JDK和Android SDK的路径) 

在使用 Android Studio 的时候,也可以随时修改JDK和Android SDK的路径。选择「File-->Other Settings-->Default Sructure」,即可进行同样的修改。 

AndroidStudio 安装的时候 Gradle 的配置

将如图路径改成你自定义的。这时候你会发现以后下载的Gradle都会进入这个文件里面。 但是当在 Android 里面执行 gradlew 命令的时候你会发现,他又去下载对应的 gradle 版本了,而且保存路径在默认的 c://[用户]//.gradle 里面。这时候问题来了,打开 gradle-wrapper.properties 文件仔细研究下文件里面写的东西:

指定一个默认路径 GRADLE_USER_HOME 这个路径就是c盘。既然发现问题的根源,现在来修改 GRADLE_USER_HOME 的值。在系统环境变量里面添加 GRADLE_USER_HOME 变量,值为指定的位置,然后一定要重启计算机。

From :[Android Studio系列(五)] Android Studio手动配置Gradle的方法:https://blog.csdn.net/u010142437/article/details/109119501

(1) android sutdio第一次打开一个工程巨慢怎么办? 
(2) 手动配置Gradle Home为什么总是无效? 
(3) 明明已经下载了Gradle,配置了gradle home,为什么打开工程还是去自动下载Gradle?

Gradle 构建配置详解:https://www.knowledgedict.com/tutorial/gradle-build-script-config.html

史上最全 Android build.gradle 配置详解:https://www.jianshu.com/p/c11862136abf

在开发过程中,

  • debug 版本我们可以跟踪调试,查看 bug 等信息,
  • 但是 release 版本中只能去打 log 进行代码进行猜测,还有就是 dump 堆栈等无法与代码直接交互的方法。无源码调试 指的是在没有源代码的情况下可以对 app 进行代码调试,逆向 smali 代码,然后查看其运行逻辑。对发现 release 版本问题的过程中可以让我们更块的定位错误。

工具及下载地址:

  • ①、apktool.jar 用于反编译 smali,下载地址:https://github.com/iBotPeaches/Apktool 。
            可以使用 AndroidKiller,更新 AK 的 apktool,然后使用 AK 进行反编译。。。
  • ②、Android Studio 下载地址: https://developer.android.google.cn/studio/
  • ③、smalidea-0.05.zip (目前最新版 0.05),AS 插件,用来给 smali 下断点,单步调试,
            下载地址:https://github.com/JesusFreke/smalidea 。解决新版 IDEA 或者 AndroidStudio 不能调试 smali 工程的问题( 不能下断点:https://blog.csdn.net/binbin594738977/article/details/106571844/

1. AndroidStudio 安装 smalidea 插件:

从 github 下载 smalidea.zip,然后在 Android 中依次选择: File   -->  Setting   将会弹出设置对话框

然后在设置对话框依次选择:  Plugins   -->  <设置图标>  --> Install Plugin from Disk...

在弹出选择对话框中,找到下载好的 smalidea 压缩包,选择ok即可

点击 OK ,会重新启动 Android Studio ,至此,插件安装就完成了。

2. 反编译

目前常用的 Android 反编译工具有:

  • Baksmali:https://github.com/JesusFreke/smali
  • Apktool:https://ibotpeaches.github.io/Apktool/
  • dex2jar:https://sourceforge.net/projects/dex2jar/

步骤:

  • 第一步:拿到想要 debug 的 apk。
  • 第二步:反编译 apk 得到 smali 代码。可以使用 baksmali 进行反编译,也可以使用 apktool 进行反编译。这里使用 AndroidKiller ( AK 其实调用 apktool)。

使用 Baksmali 反编译 apk 

baksmail 反编译命令:java -jar baksmali-2.2.1.jar  d myapp.apk -o ~/projects/myapp/src

$java -jar baksmali-2.0.5.jar debug.apk -o debug/src

使用 apktool 反编译 apk 

apktool 反编译命令:java -jar apktool.jar d myapp.apk -o ~/projects/myapp/src

使用命令 : java.exe -jar  apktool.jar d -f  <xxxx.apk>  -o <xxxx目录>

也可以直接使用 ApkTool 集成环境(如果反编译失败可以替换其中的 apktool.jar 至最新版):

这是使用 AndroidKiller 进行反编译( AK 下载地址:https://down.52pojie.cn/Tools/Android_Tools/

让 apk 可调式

参考:简单实现Android手机“全局可调试”(ro.debuggable = 1)的方法:http://www.mamicode.com/info-detail-2915184.html

在 Android 真机上调试程序有一个前提,就是这个apk包必须有 debuggable=true 的属性才行。而除了自己开发的apk能够控制打包属性之外,其他的程序发行之后显然不会设这个值为 true 的(不然随随便便就能被Debug ,岂不是很没安全感 )。为了调试这些第三方的apk,我们可以从整个手机系统入手 —— 因为除了每个apk中的 debuggable 标志以外,这个标志还可以在系统中全局指定,换句话说,只要把系统里的 debuggable 值设为true,那么不管apk的这个属性是什么值 都可以被调试了。

      Android手机系统的 ro.debuggable 这一配置位于 /default.prop 文件中,而 /default.prop 又来源于手机每次启动时 boot.img 中 ramdisk 的挂载,所以想要直接通过修改 /default.prop 是不可行的,但是系统文件是只读的,改了也没用。网上流传较广的是改 boot.img ,然而锤子并没有解锁 bootloader ,改了的话会变砖的。好在Magisk 有一个模块能够助我们实现这个修改,且看操作(默认手机已经 root 且安装了 Magisk ):

这一步很关键,就是让运行在设备中的程序支持 debug。方法有几种:

  • 把设备 root 掉
  • 修改测试机的 /default.prop 文件的 ro.debuggable=1,目测这一步也可能需要 root。
  • 使用模拟器
  • 修改 apk 的 Manifest application 属性 android:debuggable="true",可以用 apktool 解出 Manifest 然后修改,接着重新打包回去。( 反编译 apk,修改 AndroidManifest.xml 的 debug 属性并在程序的入口处添加 waitForDebugger代码进行调试等待。 )
  • 打开系统调试总开关,使用 am 命令,以调试模式启动应用。
  • 终极办法,自己编译一个 debug 版的 rom,这个稍微麻烦一点,自己编一个,想怎么玩就怎么玩。

下面只说明两种方法,

  • 一种是 修改 " AndroidManifest.xml " 实现可调试
  • 另一种是 打开系统调试总开关

修改 " AndroidManifest.xml " 实现可调试

使用 AndroidKiller 进行反编译,然后在反编译出的 AndroidManifest.xml 添加 debug 属性

如果没有这个属性的话,需要自己添加 android:debuggable="true" 然后编译安装修改后的 apk 即可。。。

不添加代码的方法:

修改 AndroidManifest.xml 之后不用在程序的启动界面添加代码也行,只要以 am 命令运行程序就行了。

以调试状态启动 app ,命令:adb shell am start -D -n com.wizardev.testjar/.MainActivity

转发 8700 端口 到安卓 对应进程 [app_pid]。命令:adb forward tcp:8700 jdwp:446

记住这时候需要将 DDMS 关掉,不然会出现错误

添加代码方法:

  • 找到启动 apk 的启动界面,然后在启动界面的 onCreate 方法的第一行添加 invoke-static {}, Landroid/os/Debug;->waitForDebugger()V 这句代码。

那么问题来了,我们怎么知道程序的启动界面呢?

其实可以通过以下几种方式:

方法 1:

观察 “AndroidManifest.xml” 文件中的代码,看下图

如果图中 “1” 处的代码,那么程序启动界面的 smail 文件就是 “2” 处的名称。如上图启动界面的 smali 文件就是“MainActivity.smali”。然后在 “MainActivity.smali” 文件中的 onCreate 方法中添加等待调试的代码即可。用 am 命令,使目标程序以调试模式运行。

方法 2:

通过 adb 命令来发现 apk 的启动界面,命令:adb shell dumpsys activity top

运行命令后会出现以下界面

图中用红框标记的就是启动界面的 smali 文件名。注:这种方式找到的启动界面可能不准确,因为有的 app 会有欢迎页,因此推荐用第一种方法来找 app 的启动界面。

主 Activity 中加入  invoke-static {},Landroid/os/Debug;->waitForDebugger()V

回编译 apk 并签名安装到手机,如果启动 app 出现以下界面,则说明以启动模式运行app成功。

(这步如果重新打包失败,可以安装原始包,把手机 root 配置/default.prop 的 ro.debuggable=1 开启全局调试。

然后用命令启动 Activiry : adb shell am start -D -n package属性的值/android:name属性的值  )

打开系统调试总开关( 不用修改 " AndroidManifest.xml " )

  这种方法不用修改 “AndroidManifest.xml”,而且当你打开这个开关后手机中的所有 App 都是可以调试的了。但是这种方法操作起来比较复杂,而且手机必须是已经 root 过的,下面会详细描述怎么打开系统调试的总开关。

  这里会介绍两种方法,第一种方法是大家普遍采用的,但是我使用采用第一种方法没有成功,于是查找资料找到了第二种方法,如果你使用第一种方法不成功,那么可以试下第二种方法。

第一种方法

  • 1. 点击这里下载“mprop”文件。

  • 2. 依次运行一下命令设置 “ro.debuggable”

adb push “下载mprop文件所在的位置”\mprop /data/local/tmp/
adb shell su
chmod 755 /data/local/tmp/mprop
data/local/tmp/mprop
setprop ro.debuggable 1
/data/local/tmp/mprop -r
  • 3. 运行 getprop ro.debuggable 命令可以查看 debuggable 的状态,显示为 1,表示更改成功。

注:这种方法在开机后设置的“debuggable”将会失效,需要重新设置

第二种方法

这种方法其实说复杂也不复杂,说不复杂呢!还是有一点复杂的。具体操作方法如下:

  • 需要手机刷入“Magisk”,刷入方法就想卡刷手机系统一样,可以到https://github.com/topjohnwu/Magisk/releases。
Magisk是什么:简单的说就是集成了root的框架,它强大的是root权限还可以设置对其他软件隐藏。
Magisk的强大远不止这点,想了解Magisk具有哪些功能可以自行搜索。
  • 通过Magisk安装“MagiskHide Props Config”模块,安装的方法可以看下面的动图。

安装完成之后需要重启,才能生效。

打开终端,输入以下命令

adb shell
props

会出现这个界面

然后,输入3,回车,会出现这个界面

然后,输入1,回车,出现这个界面

可以看到图中显示当前的 “ro.debuggable” 的值为0,如果要修改为1的话输入“y”,回车即可修改完成。

接着终端会弹出是否重启,这时继续输入“y”重启,重启后修改的“ro.debuggable”才会生效。

经过以上5步,就可以打开系统调试的总开关,这时我们打开“Monitor”工具就可以看见当前运行的所有的所有进程了。

注:通过这种方式修改的 “ro.debuggable” 值,重启手机后不会还原,就是设置过后,手机重启后不需要再次设置。

打开系统调试的总开关后,这时通过 am 命令以调试模式启动应用,即可让目标应用处于可调式状态。

adb shell am start -D -n xxx

这里的 “xxx” 为我们要调试应用的启动界面,如我们要调试应用的启动界面为 com.wizardev.testjar/.MainActivity 则输入以下命令

adb shell am start -D -n com.wizardev.testjar/.MainActivity

这是目标应用就会以调试模式运行,处于等待调试的状态。

3. 将 反编译后的smali  导入到 Android Studio 

将目标应用的 smali 源码导入 AndroidStudio。将 smali 源码导入AndroidStudio 挺简单的,只需要将反编译出来的 smali 文件夹放在工程项目中的模块的 src 目录下即可。

3.1 导入 smali 代码

简单的说一下操作方法吧。有两种方法导入: 

方法 1:新建工程导入 smali 代码

  1. 新建一个 Android 项目,不新建项目也行,但需要新建一个 module。
  2. 将项目切换到 project 视图,将新建的项目下 app 中 src 目录下的代码删除或将新建的 module 下 src 目录下的代码删除。
  3. 将我们反编译的 smali 文件夹放入 src 目录下。

这样,就将反编译的 smali 文件导入到 AndroidStudio 目中了。操作后的目录界面大致如下。

方法 2:不新建工程导入 smali 代码

步骤总览:

  • Import Project... -> Create project from existing sources
  • 将 Project(ALT+1)里面默认的 Android 视图切换为 Project 视图,将 src 设置为 Sources Root.
  • Project Structure(Ctrl+Shift+ALT+S),Project SDK设置为 Android API 10 Platform
  • 远程调试配置,Run -> Edit Configuration进入Run/Dubug ConfigurationsAdd New Configuration(+符号) -> Remote,将 5005 端口,修改为 8700 端口。

图示说明:

默认选择 Create project from existing sources ,一路 next ,最后点击 Finish 即可

3.2 导入工程后设置 Sources root

用 Project 视图,在项目目录右键  --> Mark Directory as ... --> Sources root

3.3 设置 Project 的 sdk:

如果是通过 "新建项目" 导入的 smali ,则不需要设置 sdk,因为 新建工程 时已经有默认的 sdk

如果是通过 " 导入已经存在的 " 方式导入 smali ,则需要设置 sdk :

选择 sdk ,这里选择 sdk  1.8

3.4 配置 远程调试 ( 远程 debug 配置 )

添加一个 remote 调试,

或者:

修改调试的端口:8701 ( 未占用端口均可 )

安装设置 debug=true 的 APK,在需要的地方打好断点,通过以下命令行启动进程调试等待模式:
启动第一个 Activity 然后等待 debug,命令:adb shell am start -D -S -W 包名/MainActivity(带路径)

命令行启动调试模式,adb shell am start -D -n packagename/ MainActivity
packagename 为进程名,MainActivity 为首页 Activity

启动调试 app,通过 adb shell dumpsys activity top | grep --color=always ACTIVITY 在终端获取包名和页面信息。

进入等待调试

获取运行 apk 的进程(pid):adb shell ps | grep 包名

  • 示例:adb shell ps | findstr "zhuceji" ,如下图所示,可以看到 pid 是 3170

端口映射: adb forward tcp:8701 jdwp:<pid>

  • 执行:adb forward tcp:8701 jdwp:3170    建立端口转发,即把端口 8701 上面的信息通过 jdwp 转发到 pid 是 3170 上面

进入等待调试后,在 Android studio 中执行 Run -> Debug 启动刚才创建的远程调试器,进入动态调试了。

在 Android Studio 选择附加

图二

此时,已经 Attach 到进程中,可以快乐的调试了。通过断点可以查看内存的信息。

设置 AndroidStudio 为远程调试模式

  按下面的步骤操作,将AndroidStudio运行模式设置为远程调试模式。

工程配好了,配置 debug 的端口:即 远程调试配置,Run -> Edit Configuration 进入 Run/Dubug ConfigurationsAdd New Configuration(+符号) -> Remote,将 5005 端口,修改为 8700 端口。

在出现的界面,点击左上角的“+”,在出现的下拉列表中再点击“Remote”,添加一个 remote 调试

设置远程调试的名称和监听远程的端口

在图中1处修改远程调试的名称,不修改直接用默认的也行。在2处修改远程调试服务端监听的端口,一般设置为“8700”,当然也可以设置成当前调试项目所在的端口,可以在 “Monitor”工具中查看项目所在的端口。

( 也可以用 8700 端口,然后启动 ddms 去设置端口号映射,然后 apply -> ok。设置端口号映射后 ddms 监听的 8700 端口和转发的端口都可以接收到数据。 好了,project 方面就准备好了! )

可以看到当前调试的项目有两个远程服务端端口,“8700”端口是每个调试程序默认的远程端口,如果不想每次运行程序都重新设置一下端口,2处设置成“8700”就行了,然后点击OK完成修改。这时你会发现可运行的程序中多出了一个你刚才设置的调试项目名称。

如上图,这里我直接使用默认的调试名称,则可运行的项目中多出了一个“Unnamed”选项,我们选中这个就行了,这时Android Studio就在“8700”端口监听项目的运行了。

以调试模式运行并将进程映射到8700端口

  1. 用 am 命令,使目标程序以调试模式运行。
  2. 将进程映射到 “8700” 端口,使用命令:adb forward tcp:8700 jdwp:进程id

进程 id 可以在 “Monitor” 工具中查看,如下图

也可以运行 adb 命令查看,用 adb 命令查看进程 id 的命令如下:adb shell ps | grep 包名

完成了以上两步,接着在AndroidStudio点击Debug选项,如下图

然后就可以打断点调试项目了。

注:在点击Debug选项运行项目之前,需要先将“Monitor”工具关掉,否则会提示8700端口被占用,无法进行动态调试项目。

接下来需要准备的就是如何连上设备debug了!过程也很简单,启动DDMS
Tools -> Android -> Android Device Monitor 选择你要调试的 apk 的包名

最后,开始 debug。Run->Debug Smali

针对 DDMS 端口转发,也可以手动的制定端口信息,操作如下(smalidea的作者推荐的是ddms的方式):

  1. 拿到 apk 的包名和启动的Activity,把应用启动起来然后等待 debug
    cmd 执行命令:adb shell am start -D -S -W packageName 
    ( packageName 的获取可以反编译 AndroidManifest.xml 里面有包含 )

正常的话,你会看到设备里的应用已经跑起来了,并且有个 Waiting For Debugger 的提示,别关掉它。

  • 1. 拿到程序运行的pid: adb shell ps | grep packageName
  • 2. 端口映射: adb forward tcp:8800 jdwp:5413   这里的 8800 是上一步在配置工程中自定义的端口。

官方步骤如图所示:

以上就是基于smalidea无源码调试的整个过程,有问题的可留言,我们一起交流学习。

结束语

  动态调试步骤是有点复杂,其实熟悉之后就没多大感觉了,简单设置几下就行了。可能有的手机不能root,这时就只能修改“AndroidManifest.xml”文件了,修改之后不用在程序的启动界面添加代码也行,只要以 am 命令运行程序就行了。

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

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

相关文章

IEEE协会首次在京举办研讨会,王飞跃称不存在AI芯片

本文来源&#xff1a;网易智能摘要&#xff1a;6月9日至10日&#xff0c;IEEE SMC学会&#xff08;IEEE System&#xff0c;Man&#xff0c;and Cybernetics Society&#xff09;与中国自动化学会、中国科学院自动化研究所、青岛智能产业技术研究院共同在京举办IEEE人工智能与控…

安卓逆向_14 --- 单机和弱联网游戏内购 突破口 和 思路

From&#xff1a;https://www.bilibili.com/video/BV1UE411A7rW?p41 Android 逆向资源收集&#xff08; apk &#xff09;&#xff1a;https://blog.csdn.net/qq_36869808/article/details/79290420 Android逆向-Android基础逆向7&#xff08;内购干货集合&#xff09;&#…

OpenAI最新研究:如何通过无监督学习提升「自然语言理解能力」?

来源&#xff1a;amazonaws.com摘要&#xff1a;长期以来&#xff0c;使用无监督&#xff08;预&#xff09;训练来提高区别性任务的性能表现一直是机器学习研究的一个重要目标。最近&#xff0c;OpenAI通过使用一个具有可扩展性的任务不可知系统&#xff0c;在一系列不同的自然…

安卓逆向_15( 一 ) --- JNI 和 NDK

From&#xff1a;较详细的介绍JNI&#xff1a;https://blog.csdn.net/lizhifa2011/article/details/21021177 From&#xff1a;https://www.jb51.net/article/126111.htm NDK 官方文档&#xff1a;https://developer.android.google.cn/training/articles/perf-jni JNI / NDK …

Nature:科学家成功绘制出大脑神经细胞“地图”

图片来源&#xff1a;Thomas Hainmller, Marlene Bartos来源&#xff1a;生物谷摘要&#xff1a;最近&#xff0c;一项刊登在国际杂志Nature上的研究报告中&#xff0c;来自弗莱堡大学的科学家们通过研究开发出了一种新型模型来解释大脑如何储存一些“有形事件”&#xff08;ta…

互联网的大脑模型与原子的太阳系模型,科学史上的巨系统对比

作者&#xff1a;刘锋 计算机博士&#xff0c;互联网进化论作者科学探索中&#xff0c;有两种重要的促进力量&#xff0c;第一种是认同&#xff0c;会帮助研究者增强对探索方向的信心和勇气&#xff0c;第二种是批判&#xff0c;会帮助研究者获知探索路上的障碍和陷阱。10年前…

安卓逆向_15( 二 ) --- Android Studio 3.6.3 JNI 环境配置 和 so 生成开发 demo

From&#xff1a;Android Studio 3.0 JNI 的实现&#xff1a;https://blog.csdn.net/ziyoutiankoong/article/details/79696279 Android Studio 生成so包和.H文件给jni调用产生新so包。(即so包调so包)&#xff1a;https://blog.csdn.net/sxh_android/article/details/80694291…

卡内基梅隆大学机器学习系副主任邢波:AI落地现在最缺的是思维方式

来源&#xff1a;亿欧摘要&#xff1a;邢波认为&#xff1a;人工智能现在最缺的不是算法和知识&#xff0c;而是落地应用的思维方式&#xff1b;数据如何被处理、系统如何被调试、资源如何配置&#xff0c;目前阶段还处于黑箱&#xff0c;很混沌的状态&#xff1b;人工智能未来…

安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】

Android Studio开发JNI示例&#xff1a;https://blog.csdn.net/wzhseu/article/details/79683045 JNI_动态注册_静态注册.zip : https://pan.baidu.com/s/1wpTYA9euSdPqE1Z2bA_BHA 提取码: 7h97 错误: 编码GBK的不可映射字符 ( https://blog.csdn.net/talenter111/article/de…

学界 | DeepMind等机构提出「图网络」:面向关系推理

来源&#xff1a;机器之心摘要&#xff1a;近日&#xff0c;由 DeepMind、谷歌大脑、MIT 和爱丁堡大学等公司和机构的 27 位科学家共同提交的论文《Relational inductive biases, deep learning, and graph networks》引起了人们的关注。深度学习虽然精于分类&#xff0c;但一直…

ARM 汇编基础教程番外篇 ——配置实验环境

From&#xff1a;https://zhuanlan.zhihu.com/p/29145513 win10 arm 汇编环境 Windows 平台下搭建 ARM 汇编集成环境&#xff1a;https://jingyan.baidu.com/article/4b52d70288bfcdfc5c774ba5.html 要调试 ARM 程序&#xff0c;我们需要&#xff1a; 能运行 ARM 程序的运行环…

asp.net调试方法

1、先将网站设为启动项目。 2、选择“启动选项”。 3、进行设置&#xff1a; 然后调试&#xff0c;在浏览器输入网址&#xff0c;此时如果遇到“断点”程序将自动停止运行&#xff0c;即可进行调试&#xff0c;查看运行中的变量的值。 转载于:https://www.cnblogs.com/gwjtssy/…

基因对智力的预测能力不到7%,别迷信它

图片来源&#xff1a;The Conversation撰文 Carl Zimmer翻译 李杨审校 贾晓璇编辑 魏潇2016 年我在写一本关于遗传的书时&#xff0c;曾对自己的基因组进行了测序。一些科学家还好心地指出了我基因组图谱的一些有趣特征&#xff0c;教我如何自己读取数据。从那以后&#xff0c;…

ARM 汇编语言入门

[翻译]二进制漏洞利用&#xff08;二&#xff09;ARM32位汇编下的TCP Bind shell&#xff1a;https://bbs.pediy.com/thread-253511.htm ARM汇编语言入门 From&#xff1a;ARM汇编语言入门&#xff08;一&#xff09;&#xff1a;https://zhuanlan.zhihu.com/p/109057983 原文…

图灵奖演讲2018,59页PPT迎接芯片体系结构的新黄金时代

来源&#xff1a; 计算所控制计算实验室6月4日&#xff0c;在今年的国际计算机体系结构大会ISCA2018的图灵奖演讲会上&#xff0c;ACM/IEEE邀请了2017年图灵奖获得者John Hennessy与David Patterson联合进行了一场关于未来计算机体系结构发展道路探索的精彩演讲。二位图灵奖得主…

ARM 指令集 和 Thumb 指令集

From&#xff1a;https://gitee.com/lsliushuang/ASM/blob/master/arm汇编.txt ARM 汇编指令集汇总&#xff1a;https://blog.csdn.net/qq_40531974/article/details/83897559 ARM 指令集详解(超详细&#xff01;带实例!&#xff09;&#xff1a;https://blog.csdn.net/micke…

花旗银行将因人工智能裁员50%,失业风波究竟要持续多久

来源&#xff1a;ofweek摘要&#xff1a; 在这个人工智能随时可能会取代人类工作的年代里&#xff0c;人们对自己的工作的未来应该去了解和重视&#xff0c;尤其是数字类别的行业&#xff0c;像是会计、税务、收费站是最早被人工智能替代的一批。在这个人工智能随时可能会取代人…

Python 程序的抽样分析器 - Py-Spy

From&#xff1a;https://python.freelycode.com/contribution/detail/1320 GitHub 地址&#xff1a;https://github.com/benfred/py-spy Py-Spy 是 Python 程序的抽样分析器。 它允许您可视化 Python 程序正花费时间在哪部分&#xff0c;而无需重新启动程序或以任何方式修改代…

微观世界探索者:15家值得关注的纳米技术公司

来源&#xff1a;资本实验室摘要&#xff1a;纳米技术就像微观世界的魔术&#xff0c;让人类得以前所未有地深入到物质的分子与原子层面&#xff0c;探索生物、化学、物理等各领域的融合。资本实验室今日投资关注聚焦前沿科技创新与传统产业升级纳米技术就像微观世界的魔术&…

DeepMind新论文:给侧面照片,AI给你脑补出正面

来源&#xff1a;澎湃新闻摘要&#xff1a;大家在学生时代可能都面对过这些涉及空间想象的几何题。从根本上&#xff0c;它们考验的是2D图像和3D场景间的转换能力。如今&#xff0c;人工智能也成功打破了这种“次元壁”。用小立方体搭一个几何体&#xff0c;使它的主视图和俯视…