완료됨
문자열 길이
flag 보면 50글자 이하던데 슬롯에 저장된 문자열 길이 읽어보면 0x5f 라고 나오는데 혹시 이유가 있을까요??
#web3
작성자 정보
답변
1
rbtree_work
대표 업적 없음
rbtree_work
대표 업적 없음
안녕하세요,
이는 bytes와 string을 저장하는 방식에서 기인합니다. 만약 길이가 31 이하인 경우 해당 슬롯에 그대로 그 값들을 저장하고, 마지막 바이트에 길이 * 2
값을 저장합니다. 만약 32바이트 이상인 경우에는 마지막 바이트에 길이 * 2 + 1
값을 저장합니다.
(참조: https://docs.soliditylang.org/en/v0.8.7/internals/layout_in_storage.html#bytes-and-string)
0x5F란 값은 홀수이고 위 과정을 따라 분석하면 47 * 2 + 1
이니, 길이가 47인 flag가 keccak256(1)
번 슬롯부터 저장되어 있을 것으로 보이네요.