Определить начальные адреса аргументов функции

=== проверяет значение (если объект является числом или логическим), тип и ссылка на объект. Если вы создадите 2 объекта с одинаковыми атрибутами, такими как следующее, он вернет false:

let a = { test: 'test' };
let b = { test: 'test' };
console.log(a === b); // gives false

, потому что это не та же ссылка. Таким образом, в вашем случае selectedHero === hero будет истинным, если ваши 2 объекта имеют одинаковую ссылку.

EDIT:

Еще одна точность заключается в том, что вы можете скопировать ссылку на объект в другую:

let a = { test: 'test' };
let b = a;
console.log(a === b); // gives true

, а затем, если вы измените атрибут одной ссылки, она изменится для обоих:

let a = { test: 'test' };
let b = a;
a.test = 'foo';
console.log(b.test) // gives foo
3
задан roffensive 19 January 2019 в 20:52
поделиться

1 ответ

Вызывающая сторона выдвигает аргументы в обратном порядке, в соответствии с x86 ABI, затем вызывает fun. Инструкция call помещает eip в стек перед переходом к fun. Затем вы устанавливаете свой кадр стека, делая ebp вершиной стека, поэтому arg1 должен быть на 8 байт выше кадра стека:

      higher mem
+----------+---------+
| arg 3    | 4 bytes | push arg 3
+----------+---------+           (ebp + 16)
| arg 2    | 4 bytes | push arg 2
+----------+---------+           (ebp + 12)
| arg 1    | 4 bytes | push arg 1
+----------+---------+           (ebp + 8)
| ret addr | 4 bytes | call fun
+----------+---------+           (ebp + 4)
| old ebp  | 4 bytes | push ebp; mov ebp, esp
+----------+---------+ <-------- (ebp + 0) STACK FRAME START
       lower mem 
0
ответ дан Rafael 19 January 2019 в 20:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: