MCPcopy Create free account
hub / github.com/beefytech/Beef / ParseFrameDescriptors

Method ParseFrameDescriptors

IDEHelper/COFF.cpp:7165–7277  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7163}
7164
7165void COFF::ParseFrameDescriptors(uint8* data, int size, addr_target baseAddr)
7166{
7167 uint8* ptr = data;
7168 uint8* endPtr = data + size;
7169
7170 Dictionary<int, COFFFrameProgram> programMap;
7171 Array<COFFFrameProgram::Command> cmds;
7172
7173 while (ptr < endPtr)
7174 {
7175 COFFFrameDescriptor* frame = (COFFFrameDescriptor*)ptr;
7176 ptr += sizeof(COFFFrameDescriptor);
7177
7178 COFFFrameDescriptorEntry entry;
7179 entry.mFrameDescriptor = frame;
7180
7181 bool failed = false;
7182
7183 COFFFrameProgram* programPtr = NULL;
7184 if (programMap.TryAdd(frame->mFrameFunc, NULL, &programPtr))
7185 {
7186 COFFFrameProgram program;
7187
7188 cmds.Clear();
7189 String curCmd;
7190 const char* ptr = mStringTable.mStrTable + frame->mFrameFunc;
7191 while (true)
7192 {
7193 char c = *(ptr++);
7194 if ((c == ' ') || (c == 0))
7195 {
7196 if (curCmd == "$eip")
7197 cmds.Add(COFFFrameProgram::Command_EIP);
7198 else if ((curCmd == "$esp") || (curCmd == "$21"))
7199 cmds.Add(COFFFrameProgram::Command_ESP);
7200 else if ((curCmd == "$ebp") || (curCmd == "$22"))
7201 cmds.Add(COFFFrameProgram::Command_EBP);
7202 else if ((curCmd == "$eax") || (curCmd == "$17"))
7203 cmds.Add(COFFFrameProgram::Command_EAX);
7204 else if ((curCmd == "$ebx") || (curCmd == "$20"))
7205 cmds.Add(COFFFrameProgram::Command_EBX);
7206 else if ((curCmd == "$ecx") || (curCmd == "$18"))
7207 cmds.Add(COFFFrameProgram::Command_ECX);
7208 else if ((curCmd == "$edx") || (curCmd == "$19"))
7209 cmds.Add(COFFFrameProgram::Command_EDX);
7210 else if ((curCmd == "$esi") || (curCmd == "$23"))
7211 cmds.Add(COFFFrameProgram::Command_ESI);
7212 else if ((curCmd == "$edi") || (curCmd == "$24"))
7213 cmds.Add(COFFFrameProgram::Command_EDI);
7214 else if (curCmd == "$T0")
7215 cmds.Add(COFFFrameProgram::Command_T0);
7216 else if (curCmd == "$T1")
7217 cmds.Add(COFFFrameProgram::Command_T1);
7218 else if (curCmd == "$T2")
7219 cmds.Add(COFFFrameProgram::Command_T2);
7220 else if (curCmd == "$T3")
7221 cmds.Add(COFFFrameProgram::Command_T3);
7222 else if ((curCmd == ".raSearch") || (curCmd == ".raSearchStart"))

Callers 1

RollBackStackFrameMethod · 0.45

Calls 9

AppendMethod · 0.80
TryAddMethod · 0.45
ClearMethod · 0.45
AddMethod · 0.45
IsEmptyMethod · 0.45
c_strMethod · 0.45
InsertMethod · 0.45
sizeMethod · 0.45
AllocBytesMethod · 0.45

Tested by

no test coverage detected