내가 C. 예 내에서 구조의 변수 이름을 찾기 위해 노력하고있다 :만들기 컴파일 시간 변수 오프셋지도
def.h
typedef struct
{
int fov_one;
int fov_two;
int timing_chain;
...
...
float ratio;
float spare_floats[15];
}PARAMETERS;
구조가 최대 200 개 매개 변수에 대한 장소를 보유하고
을, 이 중 일부는 현재 사용 중입니다. 현재 구조 PARAMETERS 내의 값은 2 진 파일로 채워집니다. 그러나 일부 사용자는 채워진 후 런타임에 하나 또는 두 개의 값을 변경하려고합니다. 변수 이름의 문자열 버전을 기반으로 값을 변경하는 옵션을 만들고 싶습니다. 예를 들어 변수 비율을 변경하려면 사용자가 문자열 "비율 .25"를 입력하고 "비율"의 현재 값을 ".25"로 바꿀 수 있기를 바랍니다.
내가 읽은 바로는 리플렉션이 없기 때문에 C에서 변수 이름의 문자열 버전을 기반으로 변수를 찾을 수 없습니다. 현재, 내 생각은 변수 이름을 얻기 위해 머리글을 구문 분석하는 것입니다,하지만 누군가가 그것을 스트라이핑되기 전에 링커에서 이름을 얻을 수 있습니다 언급했다. 컴파일러/링커는 컴파일하는 동안 변수 이름을 제거하고 기호를 사용하지 않고 변수에 액세스하기 위해 주소를 사용합니다.
컴파일러/링커에서 만드는 변수 이름과 오프셋이 포함 된 심볼 맵을 인쇄 할 수 있는지 알고 싶습니다. GCC의 옵션
gcc -o foo foo.c -Wl,Map,foo.map
를 사용
는지도를 작성하지만 구조의 변수 이름을 포함하지 않습니다.
컴파일 타임에 컴파일러/링커에서 생성 한 가변 오프셋 맵을 추출 할 수 있습니까?
필드의 이름은 컴파일 타임에 알려 지므로이 200 개의 필드와이를 업데이트하고 함께 매핑하는 데 사용되는 키워드 각각에 대해 알고있는 함수를 만들어야합니다. – dbush