83 pe::IMAGE_COR20_HEADER* d = clrDir();
87 case CB:
return &d->cb;
92 case FLAGS:
return &d->Flags;
95 return &d->EntryPointRVA;
174 const size_t clrFlagsCount = 6;
175 const DWORD clrFlags[clrFlagsCount] = {
176 pe::COMIMAGE_FLAGS_ILONLY,
177 pe::COMIMAGE_FLAGS_32BITREQUIRED,
178 pe::COMIMAGE_FLAGS_IL_LIBRARY,
179 pe::COMIMAGE_FLAGS_STRONGNAMESIGNED,
180 pe::COMIMAGE_FLAGS_NATIVE_ENTRYPOINT,
181 pe::COMIMAGE_FLAGS_TRACKDEBUGDATA
183 std::set<DWORD> allFlags;
184 for (
size_t i = 0; i < clrFlagsCount; ++i) {
185 const DWORD nextFlag = clrFlags[i];
186 if (flags & nextFlag) {
187 allFlags.insert(nextFlag);
195 if (flags & pe::COMIMAGE_FLAGS_ILONLY) {
198 if (flags & pe::COMIMAGE_FLAGS_32BITREQUIRED) {
199 return(
"32-bit required");
201 if (flags & pe::COMIMAGE_FLAGS_IL_LIBRARY) {
202 return (
"IL Library");
204 if (flags & pe::COMIMAGE_FLAGS_STRONGNAMESIGNED) {
205 return(
"Strong Name Signed");
207 if (flags & pe::COMIMAGE_FLAGS_NATIVE_ENTRYPOINT) {
208 return(
"Native EntryPoint");
210 if (flags & pe::COMIMAGE_FLAGS_TRACKDEBUGDATA) {
211 return(
"Track Debug Data");
offset_t getDirEntryAddress()