- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在调试 Android 应用程序的崩溃并遇到以下几行:
void myobject::save(std::string toSave) {
...
}
...
std::map<std::string, std::string> dict;
...
myobject::save(dict.find("username")->second);
生成的程序集:
02F05DFC bl _ZNKSt6__ndk16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEES7_EENS_19__map_value_compareIS7_S8_NS_4lessIS7_EELb1EEENS5_IS8_EEE4findIS7_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_
3096 str r6, [sp, #0x108 + var_48]
0146 mov r1, r0
CDE92E66 strd r6, r6, [sp, #0x108 + var_50]
11F81C2F ldrb r2, [r1, #0x1c]!
12F0010F tst.w r2, #0x1
06D1 bne loc_THERE
loc_FIRST:
D1E90002 ldrd r0, r2, [r1]
8968 ldr r1, [r1, #0x8]
3091 str r1, [sp, #0x108 + var_48]
CDE92E02 strd r0, r2, [sp, #0x108 + var_50]
04E0 b loc_HERE
loc_THERE:
D0E90821 ldrd r2, r1, [r0, #0x20]
2EA8 add r0, sp, #0xb8_ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj
FDF743FD bl _ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj
loc_HERE:
2EA9 add r1, sp, #0xb8
2046 mov r0, r4
04F047FB bl _ZN6myobject11saveENSt6__ndk112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE
我发现了错误。当 find() 返回 end() 迭代器时发生崩溃。但是,有趣的是,崩溃发生在 new() 内部(在 basic_string::__init() 内部完成)。当 find() 返回一个 end() 迭代器时,似乎 end() 的取消引用(end()->second)不会崩溃,但在将 end()->second 转换为 std::string 时会崩溃() 就在将其传递给 myobject::save() 之前。
我试图查看 libcxx 实现,但没有找到我要找的东西。有谁知道 loc_FIRST 和 loc_THERE 这两个 block 的用途是什么?为什么要检查 *(r1+0x1c) == 0x1?谁能解释一下汇编代码中“->second”出现的位置?
最佳答案
I think it's doing a small string optimization (SSO). The loc_FIRST case would be the case where the string is contained in the SSO buffer, and just copies the 12 bytes of the string directly into the stack location for the string. The loc_THERE case is when SSO is inactive and calls std::string::__init to do the allocation and other non-SSO init work. So essentially that branch is part of the std::string construction which has been inlined into this code (but the slow non-SSO path is still out of line). The bit being checked presumably indicates whether SSO is active for that string. – BeeOnRope Mar 27 at 21:02
关于c++ - map.find() 如何查看输出的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49513981/
C#内部访问修饰符的定义是内部:只能在包含程序集或友元程序集内访问。所以我的问题是什么是 C# 程序集?在包含程序集或 friend 程序集之内是什么意思?它是否意味着在同一个命名空间或项目中? 最佳
任何人都可以回答以下问题。我正在使用 c# 语言。 我可以将程序集调用为 .ddl 或 .exe 文件吗? 我可以将 Assembly Manifest 称为程序集吗? 程序集、元数据和程序集 lis
我正在从 Python 运行一个 .NET COM 程序集,只有当我将程序集 dll 和依赖项复制到我的 Python 根路径 c:\Python27 时才能使它正常工作。 这是不整洁的,所以我想将
作为世界上任何一名程序员,他/她一生中至少有一次,我正在尝试创建我的“革命性”,新的且唯一的操作系统。 :D 好吧,我正在使用虚拟模拟器(Oracle VM Virtual Box),为此我创建了一个
我创建了以下程序来读取 5 个数字,然后 dumpreg查看输入的数字... INCLUDE Irvine32.inc .data count = 5 scor
如何在保护模式下执行 IN 和 OUT 等受限指令? 我发现它需要足够高的特权级别(CPL)才能执行 IO 指令。我怎样才能在内核模式下运行,拥有 IO 权限或任何其他可能对我有帮助的东西? - 我希
目录 C# 程序集、模块和类型概念及关系 概述 程序集 模块 类型 程序集、模块和类型的关系 总结 引用
构建 maven assembly ,我留下了这样的东西: ${project.basedir} / LICENS
我的应用程序由几个核心程序集和几个扩展/插件程序集组成。为了让 MEF 知道插件必须提供的所有部件,即使我永远不会使用它们的任何部件,我也必须加载这些程序集。这使得应用程序需要更多时间来启动(如果我要
我对我们的构建基础结构有一个非常具体的要求,即将另一个 JAR 依赖项的一些内容复制到我的 Web 应用程序的特定子文件夹中。我们正在使用 maven-assembly-plugin,一个自然的方法是
为什么下面的指令会设置符号标志? mov al,0FEh sub al,2 据我了解,AL寄存器可以保存2^8 - 1或255。0FEh = 254(十进制)。减去 2 叶 252。这似乎是正数。 (
我以前使用过 NUnit,但已经有一段时间了,而且从来没有在这台机器上使用过。我在 Program Files 下解压了 2.4.8 版本,并且在尝试加载测试时不断收到此错误。 Could not l
我说的是一个使用 C# 进行游戏编程的小型游戏引擎。所以,我有一个嵌入单声道运行时的 C++ 应用程序(我称之为“启动器”)。我有一个用 C# 编写的程序集,它是我的游戏引擎类库。启动器按照 Embe
我对汇编相当陌生,并尝试从标准输入读取值(从 C 调用 scanf 函数)并将其打印回标准输出(使用 printf)。 .text readstr: .asciz "%d" #strin
谢谢帮助,我的问题是关于从下面的代码中收到的 ax 值? mov al,22h mov cl,0fdh imul cl 真机结果:ff9a 我的预期:00:9a(通过二进制相乘) 第一个数字是 22h
我正在开发一个汇编程序,该程序将整个文本文件读入缓冲区,然后将其显示在控制台中。它立即显示 24 行(每行的最大长度为 80,因为我使用 80 宽 * 25 高的 dossbox )然后等待用户输入,
我正在使用一个简单的程序集片段,使用 BIOS 作为引导加载程序的一部分将字符打印到屏幕上。这是引导加载程序代码。 [org 0x7c00] [bits 16] %include "a20_check
我只是想知道这段代码是什么意思: XOR EAX,EBX XOR EBX,EAX XOR EAX,EBX 最佳答案 那是 xor swapping . 在寄存器上执行它不会遇到常见的难看的失败案例。
我在新电脑上的 XNA 项目开始出现奇怪的错误。我有两个关于解决方案的项目和一个由它们使用的库。其中一个项目,一个 XNA 游戏项目,运行完美。另一个项目是 WindowsForm 和 XNA 的混合
是的,我正在努力实现类似的目标 __asm__(jmp label;); 其中 label 应替换为内存中保存的字符串值(结构体的字段)。 有没有办法做到这一点(或类似的方法可以让我跳转到运行时确定的
我是一名优秀的程序员,十分优秀!