herm1t LIVE!ng room - Post a comment [entries|archive|friends|userinfo]
herm1t

[ website | twilight corner in the herm1t's cave ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

День второй Jul. 30th, 2018|08:49 pm

herm1t
Наконец-то появился повод, что-нибудь написать. Вернулся к старой идее ("Recompiling the metamorphism", 2012). Всё как водится упиралось в лень и нежелание писать полноценный парсер. Лёд тронулся, господа присяжные заседатели. Фронтэнд парсит и сериализует abstract syntax tree, а бэкенд его успешно загружает и превращает в код. Теперь займусь кодогенератором, уберу gas. Байтоёбством давно не занимался, но ассемблирование и линковка - это уж совсем просто. Потом можно начинать развлекаться: constant unfolding, перемешивание top level declarations, криптостроки, издевательства над CFG. И всё это в качестве сайд-эффекта. :-) Сериализация вот в таком вод виде, довольно идиотический, зато простой и не заморочливый:
static void *copy_dict(void *v, void *(*ele)(void*))
{
	Dict *r = NULL;
	if (v == NULL || ((r = hash_get(v)) != NULL))
		return r;
	r = store(v, sizeof(Dict));
	r->map = copy_map(r->map, ele);
	r->key = copy_vector(r->key, copy_string);
	return r;
}

static void *copy_type(void *v)
{
	Type *r = NULL;
	if (v == NULL || ((r = hash_get(v)) != NULL))
		return r;
	r = store(v, sizeof(Type));
	r->ptr = copy_type(r->ptr);
	r->fields = copy_dict(r->fields, copy_type);
	r->rettype = copy_type(r->rettype);
	r->params = copy_vector(r->params, copy_type);
	return r;
}
Link Read Comments

Reply:
From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message:



Notice! This user has turned on the option that logs IP addresses of anonymous posters.