Skip to content

Commit 2b1b5eb

Browse files
committed
Merge branch 'GP-3320_1635321_addGccCspecs' (Closes NationalSecurityAgency#299)
2 parents 2b2eafc + 7878721 commit 2b1b5eb

File tree

2 files changed

+199
-1
lines changed

2 files changed

+199
-1
lines changed

Ghidra/Processors/x86/data/languages/x86-64-gcc.cspec

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,4 +239,135 @@
239239
<register name="RBP"/>
240240
</returnaddress>
241241
</prototype>
242+
243+
<callfixup name="x86_return_thunk">
244+
<target name="__x86_return_thunk"/>
245+
<pcode>
246+
<body><![CDATA[
247+
RIP = *:8 RSP;
248+
RSP = RSP + 8;
249+
return [RIP];
250+
]]></body>
251+
</pcode>
252+
</callfixup>
253+
<callfixup name="fentry">
254+
<target name="__fentry__"/>
255+
<pcode>
256+
<body><![CDATA[
257+
temp:1 = 0;
258+
]]></body>
259+
</pcode>
260+
</callfixup>
261+
<callfixup name="mcount">
262+
<target name="mcount"/>
263+
<pcode>
264+
<body><![CDATA[
265+
temp:1 = 0;
266+
]]></body>
267+
</pcode>
268+
</callfixup>
269+
<callfixup name="x86_indirect_thunk_rbp">
270+
<target name="__x86_indirect_thunk_rbp"/>
271+
<pcode>
272+
<body><![CDATA[
273+
call [RBP];
274+
]]></body>
275+
</pcode>
276+
</callfixup>
277+
<callfixup name="x86_indirect_thunk_rax">
278+
<target name="__x86_indirect_thunk_rax"/>
279+
<pcode>
280+
<body><![CDATA[
281+
call [RAX];
282+
]]></body>
283+
</pcode>
284+
</callfixup>
285+
<callfixup name="x86_indirect_thunk_rbx">
286+
<target name="__x86_indirect_thunk_rbx"/>
287+
<pcode>
288+
<body><![CDATA[
289+
call [RBX];
290+
]]></body>
291+
</pcode>
292+
</callfixup>
293+
<callfixup name="x86_indirect_thunk_rcx">
294+
<target name="__x86_indirect_thunk_rcx"/>
295+
<pcode>
296+
<body><![CDATA[
297+
call [RCX];
298+
]]></body>
299+
</pcode>
300+
</callfixup>
301+
<callfixup name="x86_indirect_thunk_rdx">
302+
<target name="__x86_indirect_thunk_rdx"/>
303+
<pcode>
304+
<body><![CDATA[
305+
call [RDX];
306+
]]></body>
307+
</pcode>
308+
</callfixup>
309+
<callfixup name="x86_indirect_thunk_r8">
310+
<target name="__x86_indirect_thunk_r8"/>
311+
<pcode>
312+
<body><![CDATA[
313+
call [R8];
314+
]]></body>
315+
</pcode>
316+
</callfixup>
317+
<callfixup name="x86_indirect_thunk_r9">
318+
<target name="__x86_indirect_thunk_r9"/>
319+
<pcode>
320+
<body><![CDATA[
321+
call [R9];
322+
]]></body>
323+
</pcode>
324+
</callfixup>
325+
<callfixup name="x86_indirect_thunk_r10">
326+
<target name="__x86_indirect_thunk_r10"/>
327+
<pcode>
328+
<body><![CDATA[
329+
call [R10];
330+
]]></body>
331+
</pcode>
332+
</callfixup>
333+
<callfixup name="x86_indirect_thunk_r11">
334+
<target name="__x86_indirect_thunk_r11"/>
335+
<pcode>
336+
<body><![CDATA[
337+
call [R11];
338+
]]></body>
339+
</pcode>
340+
</callfixup>
341+
<callfixup name="x86_indirect_thunk_r12">
342+
<target name="__x86_indirect_thunk_r12"/>
343+
<pcode>
344+
<body><![CDATA[
345+
call [R12];
346+
]]></body>
347+
</pcode>
348+
</callfixup>
349+
<callfixup name="x86_indirect_thunk_r13">
350+
<target name="__x86_indirect_thunk_r13"/>
351+
<pcode>
352+
<body><![CDATA[
353+
call [R13];
354+
]]></body>
355+
</pcode>
356+
</callfixup>
357+
<callfixup name="x86_indirect_thunk_r14">
358+
<target name="__x86_indirect_thunk_r14"/>
359+
<pcode>
360+
<body><![CDATA[
361+
call [R14];
362+
]]></body>
363+
</pcode>
364+
</callfixup>
365+
<callfixup name="x86_indirect_thunk_r15">
366+
<target name="__x86_indirect_thunk_r15"/>
367+
<pcode>
368+
<body><![CDATA[
369+
call [R15];
370+
]]></body>
371+
</pcode>
372+
</callfixup>
242373
</compiler_spec>

Ghidra/Processors/x86/data/languages/x86gcc.cspec

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@
364364
</pcode>
365365
</callfixup>
366366

367-
<callfixup name="get_pc_thunk_si">
367+
<callfixup name="get_pc_thunk_si">
368368
<target name="__i686.get_pc_thunk.si"/>
369369
<target name="__x86.get_pc_thunk.si"/>
370370
<pcode>
@@ -374,4 +374,71 @@
374374
]]></body>
375375
</pcode>
376376
</callfixup>
377+
378+
<callfixup name="x86_return_thunk">
379+
<target name="__x86_return_thunk"/>
380+
<pcode>
381+
<body><![CDATA[
382+
EIP = *:4 ESP;
383+
ESP = ESP + 4;
384+
return [EIP];
385+
]]></body>
386+
</pcode>
387+
</callfixup>
388+
<callfixup name="fentry">
389+
<target name="__fentry__"/>
390+
<pcode>
391+
<body><![CDATA[
392+
temp:1 = 0;
393+
]]></body>
394+
</pcode>
395+
</callfixup>
396+
<callfixup name="mcount">
397+
<target name="mcount"/>
398+
<pcode>
399+
<body><![CDATA[
400+
temp:1 = 0;
401+
]]></body>
402+
</pcode>
403+
</callfixup>
404+
<callfixup name="x86_indirect_thunk_ebp">
405+
<target name="__x86_indirect_thunk_ebp"/>
406+
<pcode>
407+
<body><![CDATA[
408+
call [EBP];
409+
]]></body>
410+
</pcode>
411+
</callfixup>
412+
<callfixup name="x86_indirect_thunk_eax">
413+
<target name="__x86_indirect_thunk_eax"/>
414+
<pcode>
415+
<body><![CDATA[
416+
call [EAX];
417+
]]></body>
418+
</pcode>
419+
</callfixup>
420+
<callfixup name="x86_indirect_thunk_ebx">
421+
<target name="__x86_indirect_thunk_ebx"/>
422+
<pcode>
423+
<body><![CDATA[
424+
call [EBX];
425+
]]></body>
426+
</pcode>
427+
</callfixup>
428+
<callfixup name="x86_indirect_thunk_ecx">
429+
<target name="__x86_indirect_thunk_ecx"/>
430+
<pcode>
431+
<body><![CDATA[
432+
call [ECX];
433+
]]></body>
434+
</pcode>
435+
</callfixup>
436+
<callfixup name="x86_indirect_thunk_edx">
437+
<target name="__x86_indirect_thunk_edx"/>
438+
<pcode>
439+
<body><![CDATA[
440+
call [EDX];
441+
]]></body>
442+
</pcode>
443+
</callfixup>
377444
</compiler_spec>

0 commit comments

Comments
 (0)