Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Z
zipr_callbacks
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
Open Source Software
zipr_callbacks
Commits
2bd03623
Commit
2bd03623
authored
7 years ago
by
an7s
Browse files
Options
Downloads
Patches
Plain Diff
cleanup debug
parent
cc3abe9b
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
configure_for_datashadow
+3
-1
3 additions, 1 deletion
configure_for_datashadow
datashadow/datashadow_callbacks.c
+37
-53
37 additions, 53 deletions
datashadow/datashadow_callbacks.c
with
40 additions
and
54 deletions
configure_for_datashadow
+
3
−
1
View file @
2bd03623
#!/bin/bash
./configure
--enable-debugging
--enable-datashadow
--enable-libc
--prefix
=
$ZIPR_INSTALL
$*
#./configure --enable-debugging --enable-datashadow --enable-libc --prefix=$ZIPR_INSTALL $*
./configure
--enable-datashadow
--enable-libc
--prefix
=
$ZIPR_INSTALL
$*
This diff is collapsed.
Click to expand it.
datashadow/datashadow_callbacks.c
+
37
−
53
View file @
2bd03623
...
...
@@ -2,40 +2,13 @@
* Function pointer/data shadowing
*/
#include
<stdlib.h>
//
// When writing a callback handler/detector
//
// argument #1 : return address
// argument #2 : register data structure
// argument #3..#6: optional set of args specific to the callback handler
//
// #include <stdlib.h>
#define MAX_DIAGNOSTIC_SIZE 1024
/* the registers are saved onto the stack in this order */
typedef
struct
reg_values
reg_values_t
;
struct
reg_values
{
size_t
flags
;
size_t
r15
;
size_t
r14
;
size_t
r13
;
size_t
r12
;
size_t
r11
;
size_t
r10
;
size_t
r9
;
size_t
r8
;
size_t
rax
;
size_t
rbx
;
size_t
rcx
;
size_t
rdx
;
size_t
rsi
;
size_t
rdi
;
size_t
rbp
;
size_t
rsp
;
};
// Has to match client side (fptr_shadow)
#define SHADOW_TERMINATE 1
#define SHADOW_CONTINUE 2
static
void
my_strcpy
(
char
*
dest
,
char
*
src
)
{
...
...
@@ -43,27 +16,12 @@ static void my_strcpy(char *dest, char *src)
while
(
*
dest
++
=
*
src
++
);
}
// void signedness_detector_signed(void *p_retAddress, reg_values_t *p_rv, void* p_addressTruncated, volatile long int p_policy)
// shadowMap[p_shadowIndex] = p_shadowValue
// add to multi-valued table
//void fptr_shadow_define_64(void *p_retAddress, reg_values_t *p_rv, void *p_instrumented, int p_shadowIndex, void *p_shadowValue)
void
fptr_shadow_define_64
(
int
p_shadowIndex
,
void
*
p_shadowValue
)
{
#ifdef DEBUG
char
msg
[
MAX_DIAGNOSTIC_SIZE
];
add_shadow_entry
(
p_shadowIndex
,
p_shadowValue
);
// @todo: print first and last element of p_rv and see what we get
// verify against pushed values in the transform
#ifdef DEBUG
my_strcpy
(
msg
,
"FPTRSHADOW:DEFINE "
);
/*
my_strcpy(&msg[strlen(msg)], " retaddress: ");
itox(p_retAddress, &msg[strlen(msg)]);
my_strcpy(&msg[strlen(msg)], " instrumented: ");
itox(p_instrumented, &msg[strlen(msg)]);
*/
my_strcpy
(
&
msg
[
strlen
(
msg
)],
" shadowid: "
);
itox
(
p_shadowIndex
,
&
msg
[
strlen
(
msg
)]);
my_strcpy
(
&
msg
[
strlen
(
msg
)],
" value: "
);
...
...
@@ -72,42 +30,68 @@ void fptr_shadow_define_64(int p_shadowIndex, void *p_shadowValue)
write
(
2
,
msg
,
strlen
(
msg
));
#endif
add_shadow_entry
(
p_shadowIndex
,
p_shadowValue
);
}
// check to make sure values match
void
fptr_shadow_check_64
(
int
p_shadowIndex
,
int
p_policy
,
void
**
p_shadow
)
{
char
msg
[
MAX_DIAGNOSTIC_SIZE
];
void
*
restored
;
int
count
=
0
;
#ifdef DEBUG
char
msg
[
MAX_DIAGNOSTIC_SIZE
];
my_strcpy
(
msg
,
"FPTRSHADOW:CHECK: "
);
my_strcpy
(
&
msg
[
strlen
(
msg
)],
" shadowid: "
);
itox
(
p_shadowIndex
,
&
msg
[
strlen
(
msg
)]);
my_strcpy
(
&
msg
[
strlen
(
msg
)],
" policy: "
);
itox
(
p_policy
,
&
msg
[
strlen
(
msg
)]);
write
(
2
,
msg
,
strlen
(
msg
));
my_strcpy
(
msg
,
" shadowValue(loc): "
);
itox
(
p_shadow
,
&
msg
[
strlen
(
msg
)]);
write
(
2
,
msg
,
strlen
(
msg
));
my_strcpy
(
msg
,
" shadowValue: "
);
itox
(
*
p_shadow
,
&
msg
[
strlen
(
msg
)]);
my_strcpy
(
&
msg
[
strlen
(
msg
)],
"
\n
"
);
write
(
2
,
msg
,
strlen
(
msg
));
#endif
int
success
=
check_shadow_value
(
p_shadowIndex
,
*
p_shadow
,
&
restored
,
&
count
);
if
(
!
success
)
{
// oh oh, need to restore
*
p_shadow
=
restored
;
switch
(
p_policy
)
{
case
SHADOW_CONTINUE
:
#ifdef DEBUG
my_strcpy
(
msg
,
"Warning: overwrite of function pointer detected -- restoring saved value: 0x"
);
itox
(
*
p_shadow
,
&
msg
[
strlen
(
msg
)]);
my_strcpy
(
&
msg
[
strlen
(
msg
)],
"
\n
"
);
write
(
2
,
msg
,
strlen
(
msg
));
#endif
break
;
case
SHADOW_TERMINATE
:
default:
{
char
msg
[
MAX_DIAGNOSTIC_SIZE
];
my_strcpy
(
msg
,
"Warning: overwrite of function pointer detected -- induce segfault
\n
"
);
write
(
2
,
msg
,
strlen
(
msg
));
my_strcpy
(
0
,
""
);
// induce crash
}
break
;
}
}
else
{
#ifdef DEBUG
my_strcpy
(
msg
,
"FPTRSHADOW: OK: "
);
my_strcpy
(
&
msg
[
strlen
(
msg
)],
" shadowValue: "
);
itox
(
*
p_shadow
,
&
msg
[
strlen
(
msg
)]);
my_strcpy
(
&
msg
[
strlen
(
msg
)],
"
\n
"
);
write
(
2
,
msg
,
strlen
(
msg
));
my_strcpy
(
msg
,
"FPTRSHADOW: OK: "
);
my_strcpy
(
&
msg
[
strlen
(
msg
)],
" shadowValue: "
);
itox
(
*
p_shadow
,
&
msg
[
strlen
(
msg
)]);
my_strcpy
(
&
msg
[
strlen
(
msg
)],
"
\n
"
);
write
(
2
,
msg
,
strlen
(
msg
));
#endif
}
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment