Skip to content

Commit 9069187

Browse files
authored
Masquerade class bits in objc selector refs ##analysis
1 parent 335f4fe commit 9069187

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

libr/core/anal_objc.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,11 @@ static bool objc_find_refs(RCore *core) {
261261
if (!readSuccess || isInvalid (classRoVA)) {
262262
continue;
263263
}
264+
if (objc->word_size == 8) {
265+
classRoVA &= ~(ut64)0x7;
266+
} else {
267+
classRoVA &= ~(ut64)0x3;
268+
}
264269
ut64 classMethodsVA = readQword (objc, classRoVA + objc2ClassBaseMethsOffs, &readSuccess);
265270
if (!readSuccess || isInvalid (classMethodsVA)) {
266271
continue;
@@ -312,17 +317,15 @@ static bool objc_find_refs(RCore *core) {
312317
RVecAnalRef_free (xrefs);
313318
}
314319
}
320+
// R_LOG_INFO ("Found %u objc xrefs", (unsigned int)total_xrefs);
315321

316-
const ut64 pa_selrefs = objc->_selrefs->paddr;
317322
const ut64 va_selrefs = objc->_selrefs->vaddr;
318323
const ut64 ss_selrefs = va_selrefs + objc->_selrefs->vsize;
319324

320-
R_LOG_INFO ("Found %u objc xrefs", (unsigned int)total_xrefs);
321325
size_t total_words = 0;
322326
ut64 a;
323327
const size_t word_size = objc->word_size;
324-
const size_t maxsize = objc->file_size - pa_selrefs;
325-
for (a = va_selrefs; a < ss_selrefs && a < maxsize; a += word_size) {
328+
for (a = va_selrefs; a < ss_selrefs; a += word_size) {
326329
r_meta_set (core->anal, R_META_TYPE_DATA, a, word_size, NULL);
327330
total_words++;
328331
}

0 commit comments

Comments
 (0)