|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
Index: output.c
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
===================================================================
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
--- output.c (revision 45)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+++ output.c (working copy)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -170,7 +170,6 @@ void output_left(enum tof type, struct p
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
}
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
if (current_proc) {
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
fprintf(output, " <unfinished ...>\n");
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
- current_proc = 0;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
current_column = 0;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
}
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
current_proc = proc;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
Index: elf.c
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
===================================================================
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
--- elf.c (revision 45)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+++ elf.c (working copy)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -403,7 +403,7 @@ struct library_symbol *read_elf(struct p
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
add_library_symbol(addr, name, &library_symbols,
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
(PLTS_ARE_EXECUTABLE(lte)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
? LS_TOPLT_EXEC : LS_TOPLT_POINT),
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
- ELF64_ST_BIND(sym.st_info) != 0);
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ ELF64_ST_BIND(sym.st_info) == STB_WEAK);
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
if (!lib_tail)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
lib_tail = &(library_symbols->next);
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
}
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -415,7 +415,7 @@ struct library_symbol *read_elf(struct p
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
already there. */
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
main_cheat = (struct opt_x_t *)malloc(sizeof(struct opt_x_t));
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
if (main_cheat == NULL)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
- error(EXIT_FAILURE, 0, "Couldn allocate memory");
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ error(EXIT_FAILURE, 0, "Couldn't allocate memory");
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
main_cheat->next = opt_x;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
main_cheat->found = 0;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
main_cheat->name = PLTs_initialized_by_here;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -464,7 +464,7 @@ struct library_symbol *read_elf(struct p
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
if (strcmp(xptr->name, PLTs_initialized_by_here) == 0) {
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
if (lte->ehdr.e_entry) {
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
add_library_symbol (
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
- elf_plt2addr (lte, (void*)(long)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ opd2addr (lte, (void*)(long)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
lte->ehdr.e_entry),
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
PLTs_initialized_by_here,
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
lib_tail, 1, 0);
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
Index: sysdeps/linux-gnu/ppc/plt.c
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
===================================================================
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
--- sysdeps/linux-gnu/ppc/plt.c (revision 45)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+++ sysdeps/linux-gnu/ppc/plt.c (working copy)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -1,4 +1,5 @@
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#include <gelf.h>
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+#include <errno.h>
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#include "ltrace.h"
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#include "elf.h"
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#include "debug.h"
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -15,8 +16,7 @@ void *sym2addr(struct process *proc, str
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
long addr = sym->enter_addr;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
long pt_ret;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
- debug(3, 0);
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
-
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ debug(2, "sym2addr: sym=%s, pid=%d, enter_addr=%p", sym->name, proc->pid, addr);
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
if (sym->plt_type != LS_TOPLT_POINT) {
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
return addr;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
}
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -46,6 +46,10 @@ void *sym2addr(struct process *proc, str
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
// break-point right in the PLT.
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
pt_ret = ptrace(PTRACE_PEEKTEXT, proc->pid, addr, 0);
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ if (pt_ret == -1 && errno) {
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ perror ("ptrace");
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
if (proc->mask_32bit) {
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
// Assume big-endian.
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
Index: sysdeps/linux-gnu/ppc/regs.c
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
===================================================================
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
--- sysdeps/linux-gnu/ppc/regs.c (revision 45)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+++ sysdeps/linux-gnu/ppc/regs.c (working copy)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -5,8 +5,10 @@
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#include <sys/types.h>
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#include <sys/ptrace.h>
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#include <asm/ptrace.h>
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+#include <errno.h>
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#include "ltrace.h"
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+#include "debug.h"
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#if (!defined(PTRACE_PEEKUSER) && defined(PTRACE_PEEKUSR))
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
# define PTRACE_PEEKUSER PTRACE_PEEKUSR
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -35,6 +37,11 @@ void *get_stack_pointer(struct process *
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
void *get_return_addr(struct process *proc, void *stack_pointer)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
{
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
- return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, sizeof(long) * PT_LNK,
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
- 0);
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ long p = ptrace(PTRACE_PEEKUSER, proc->pid, sizeof(long) * PT_LNK, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ if (p == -1 && errno) {
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ perror ("ptrace");
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ debug (3, "pid=%d ret=%p", proc->pid, p);
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ return (void*)p;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
}
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
Index: sysdeps/linux-gnu/ppc/arch.h
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
===================================================================
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
--- sysdeps/linux-gnu/ppc/arch.h (revision 45)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+++ sysdeps/linux-gnu/ppc/arch.h (working copy)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -7,6 +7,7 @@
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#ifdef __powerpc64__ // Says 'ltrace' is 64 bits, says nothing about target.
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#define LT_ELFCLASS2 ELFCLASS64
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#define LT_ELF_MACHINE2 EM_PPC64
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#define PLT_REINITALISATION_BP "_start"
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -16,6 +17,3 @@
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#if (PPC_NOP_LENGTH != BREAKPOINT_LENGTH)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#error "Length of the breakpoint value not equal to the length of a nop instruction"
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
#endif
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
-
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
-
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
-#endif
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
Index: breakpoints.c
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
===================================================================
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
--- breakpoints.c (revision 45)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+++ breakpoints.c (working copy)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -28,6 +28,7 @@ insert_breakpoint(struct process *proc,
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
struct library_symbol *libsym)
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
{
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
struct breakpoint *sbp;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ debug(1, "insert_breakpoint(symbol=%s, addr=%p)", libsym?libsym->name:"(nil)", addr);
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
if (!proc->breakpoints) {
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
proc->breakpoints =
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
@@ -165,11 +166,9 @@ void breakpoints_init(struct process *pr
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
} else {
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
proc->list_of_symbols = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
}
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
- sym = proc->list_of_symbols;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
- while (sym) {
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
+ for (sym = proc->list_of_symbols; sym; sym = sym->next) {
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
/* proc->pid==0 delays enabling. */
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
insert_breakpoint(proc, sym2addr(proc, sym), sym);
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
- sym = sym->next;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
}
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
proc->callstack_depth = 0;
|
|
![](https://seccdn.libravatar.org/avatar/31ea1396ba7da6f6b28d3858e6d29d181a6344900afb867475d5288d7ae03c37?s=16&d=retro) |
fffe0fb |
proc->breakpoints_enabled = -1;
|