C++
variable a;
a의 내부 private 변수에 직접 접근해야돼서
a의 this 포인터를 가져오고 싶음
&a는 로컬 변수 a의 주소를 가져오니 이건 아니고
클래스 variable이 사실 포인터인게 아닐까 싶어서 variable을 포인터로 변환해봄
-----
unsigned * ptr;
asm("movq %1, %0" : "=rm" ( ptr ) : "r" ( a ) );
std::cout << ptr << "\n";
-----
참고로 여기의 인라인 어셈블리는 단순히 a를 ptr에 강제로 대입하는 역할을 함.
이렇게 해보고 한번 a의 this 포인터랑 출력해서 비교했더니
0x7ffeec213d88 // a의 this 포인터
0x7ffeec213d80 // ptr
이렇게 8바이트 차이나더라
차이가 나긴 해도 &a의 값처럼 생뚱맞은 주소가 나오지 않아서
내가 생각한 방식이 그나마 맞는거같은데
차이가 나는 이유가 뭘지 궁금하다
그리고 variable은 외부 라이브러리의 클래스라서 그 내부는 건들 수 없음
너가 말하는 this 포인터가 '로컬 변수 a의 주소'가 아니야?
한번 테스트 프로젝트 만들어서 해봤는데 this = &a로 나오네 되게 혼란스럽다 왜 메인 프로젝트에선 다르게 나오지
내가 어셈코드를 잘몰라서 그런데 너 어셈코드 돌아가긴함? 두번째인자에 a를 &a로 바꿔야 돌아가는데? 안그럼 에러나오더라
Error: operand type mismatch for `movq'
테스트 코드 :
https://onlinegdb.com/HJx9PbSeu
어떻게 접근했는지 모르겠다만 vtable 때문에 계산이 이상해진거 아님? this랑 &a랑 다를 이유가 없는데
같다고 예상하는걸 보면 a가 첫번째 필드인거임? 근데 C++에선 첫번째 필드의 주소값이랑 this랑 다를수도 있음
a가 멤버변수 말하는게 이니라 그냥 함수내에서 정의한 클래스 인스턴스 말하는거 같은데
정의한 -> 선언한
그러니까 a가 원하는 타입의 인스턴스란건데 그럼 그게 바로 this 인거 아닌가?
나도 당연히 this랑 같아야하는거 같음 ㅇㅇ
로컬 변수니까 움직일때마다 주소가 변하니 뭔가 측정시점을 다르게 잡았을듯
그럴거 같다 ㅋㅋㅋ 나도 집에 가면 해봐야겠네 ㅋㅋ
가상함수 씀? - dc App
vtable 생긴다고 this 값에 영향이 가나??
가상함수 없음
정의상 this == &a 아닌가
private에 접근해야하면 그건 설계가 잘못된거지
근데 메서드 안쓰고 왜 어샘까지 써서 하는거임?