U E D R , A S I H C RSS

C/Assembly/��터와배열

~cpp 
char t[] = "1234";
char *p = "5678";
char k[] = "123456";



.LC1:
    .string "5678"
.LC0:
    .string "1234"
.LC2:
    .string "123456";

// char t[] = "1234";
    movl    .LC0, %eax
    movl    %eax, -9(%ebp)
    movb    .LC0+4, %al
    movb    %al, -5(%ebp)

// char *p = "5678";
    movl    $.LC1, -4(%ebp)

// char k[] = "123456";
    leal    -19(%ebp), %edi
    movl    $.LC0, %esi
    cld
    movl    $7, %ecx
    rep
    movsb
// 마지막 k변수는 index 주소를 사용해 메모리를 목사하고 있다.
// 그렇다면 index로 메모리를 복사하는 것� eax로 복사하는 것보다 �리다는 얘긴가?

사람들� 엉뚱하게 ��하는 가장 쉽고� 어려운 문제?

위� 경우 t는 조작 가능하지만 p는 조작 가능하지 않다.
왜�하면 프로그램� 모든 것� 메모리로 올�간다. 즉, LC0, LC1� 프로그램� �부로 ��터 �역� 올�간다.
��터는 LC1� 가리키므로 메모리� 올려진 변하면 안�는 프로그램�역(CODE �역)� 가리킨다.
하지만 배열(LC0)� 프로그램� 수행 �고 정� 부분� �는 순간 LC0 �역� ��터를 스� �역� 복사한다.
즉, 배열� CODE �역� ��터와 달리 스��역� 존재하게 �므로 수정� 가능하게 �는 것�다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:47
Processing time 0.0034 sec