Skip to content

Commit b5b536e

Browse files
Check the validity of function addresses
1 parent e0434b1 commit b5b536e

File tree

1 file changed

+11
-17
lines changed

1 file changed

+11
-17
lines changed

src/main/java/golanganalyzerextension/GolangAnalyzerExtensionAnalyzer.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -108,49 +108,43 @@ public boolean added(Program program, AddressSetView set, TaskMonitor monitor, M
108108
Address func_list_base=base.add(8+pointer_size);
109109
log_tmp("start loop");
110110
for(int i=0; i<func_num; i++) {
111-
long func_addr_offset=0;
111+
long func_addr_value=0;
112112
long func_info_offset=0;
113113
int func_name_offset=0;
114114
int args=0;
115115
try {
116116
if(pointer_size==8) {
117-
func_addr_offset=memory.getLong(func_list_base.add(i*pointer_size*2));
117+
func_addr_value=memory.getLong(func_list_base.add(i*pointer_size*2));
118118
func_info_offset=memory.getLong(func_list_base.add(i*pointer_size*2+pointer_size));
119119
}else {
120-
func_addr_offset=memory.getInt(func_list_base.add(i*pointer_size*2));
120+
func_addr_value=memory.getInt(func_list_base.add(i*pointer_size*2));
121121
func_info_offset=memory.getInt(func_list_base.add(i*pointer_size*2+pointer_size));
122122
}
123-
log_tmp(String.format("get first offset %x %x", func_addr_offset, func_info_offset));
124-
long address=memory.getInt(base.add(func_info_offset));
123+
long func_entry_value=memory.getInt(base.add(func_info_offset));
125124

126125
func_name_offset=memory.getInt(base.add(func_info_offset+pointer_size));
127-
log_tmp(String.format("get second offset %x", func_name_offset));
128126

129127
Listing listing=program.getListing();
130-
log_tmp(String.format("func_name_data %x", base.add(func_name_offset).getOffset()));
128+
131129
Data func_name_data=listing.getDefinedDataAt(base.add(func_name_offset));
132130
if(func_name_data==null) {
133131
func_name_data=listing.createData(base.add(func_name_offset), new StringDataType());
134132
}else if(!func_name_data.getDataType().isEquivalent((new StringDataType()))) {
135133
log_tmp("failed !func_name_data.getDataType().isEquivalent((new StringDataType()))");
136-
return false;
134+
continue;
137135
}
138136
log_tmp("get name");
139137

140138
args=memory.getInt(base.add(func_info_offset+pointer_size+4));
141139
log_tmp(String.format("get args %d", args));
142140

143-
Address func_addr=program.getAddressFactory().getDefaultAddressSpace().getAddress(func_addr_offset);
144-
log_tmp(String.format("func addr %x", func_addr.getOffset()));
145-
log_tmp(String.format("entrypoint %x", address));
146-
if(func_addr.getOffset()!=address)
141+
log_tmp(String.format("entrypoint %x", func_entry_value));
142+
if(func_addr_value!=func_entry_value)
147143
{
148-
log_tmp("wrongg");
149-
}
150-
if(func_addr_offset!=address)
151-
{
152-
log_tmp("wrongh");
144+
log_tmp("wrong func addr");
145+
continue;
153146
}
147+
Address func_addr=program.getAddressFactory().getDefaultAddressSpace().getAddress(func_addr_value);
154148
Function func=program.getFunctionManager().getFunctionAt(func_addr);
155149
log_tmp("get func");
156150
String func_name=(String)func_name_data.getValue();

0 commit comments

Comments
 (0)