HTB-Entity
先看开头,这里只看static union,union共用体里面的变量会向union一样公用一个内存,加上static目的应该是为了保持union持久。
直接看main重点代码,有一个叫result类型为menu_t结构体,然后让一个函数的menu的返回值作为参数。
menu_t有两个变量act和field。
act用于switch的判断。
field作为switch内几个函数的参数使用。
只说重点代码,如果输入T,上面所说的act就等于STORE_SET,以下类推。直接输入C就让act等于FLAG后直接返回。
接着下一步,L代表整数,S代表字符串,最后返回res。
如果我们上面输入的T和L,那么下面的switch就会进入STORE_SET并且set_field函数值为上面输入的整数。
f就是前面输入的L所代表的整数,整数里面有一个判断,如果等于就退出程序。字符串并没有,会把buf给DataStore.string。
根据get_flag(),只有DataStore.integer等于13371337才会打印flag.txt。
因为DataStore.string和DataStore.integer是共用体使用同一个内存,所以只要能让DataStore.string的值可以转化为数字13371337,DataStore.integer就会等于13371337。输入1234测试数据然后去查看DataStore.string怎么保存的。
所以然后只需要输入八个字节字符给buf,然后经过memcpy把buf值复制给DataStore.string。