从逆向分析角度看C++ 中的引用

几个问题:

1. 引用变量占有内存空间吗?

2. 引用是怎样工作的?

3. 指针是怎样工作的?

4. 引用和指针有什么区别?


1. 何为引用

《C++ Primer》里面是这样说的“引用(Reference)就是对象的另一个名字,引用只是它绑定的对象的另一个名字,作用在引用上的所有操作事实上都是作用在该引用绑定的对象上”,这句话概括得很彻底


2. 引用占有内存空间吗?

一段C++代码:

// Reference_Pointer_Local
#include <cstdio>

int main() {
  int  a = 100;
  int& ref = a;
  int* ptr = &a;
  printf("%d %d %d\n", a, ref, *ptr);
  return 0;
}

使用 /FAs 编译选项,其汇编代码:

PUBLIC	_main
EXTRN	_printf:NEAR
_DATA	SEGMENT
$SG530	DB	'%d %d %d', 0aH, 00H
_DATA	ENDS
_TEXT	SEGMENT
_a$ = -8
_ref$ = -12
_ptr$ = -4
_main	PROC NEAR

; 4    : int main() {

	push	ebp
	mov	ebp, esp
	sub	esp, 12					; 建立堆栈,预留12个字节

; 5    :   int  a = 100;

	mov	DWORD PTR _a$[ebp], 100			; [ebp-8]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值