Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Recon x64 #56

Merged
merged 28 commits into from Jan 21, 2023
Merged

Recon x64 #56

merged 28 commits into from Jan 21, 2023

Conversation

cmaruti
Copy link
Contributor

@cmaruti cmaruti commented Mar 17, 2015

Improved support for x64 systems

Improved support for x64 systems
SysVAmd64Call vs sysvamd64call
index (skipping the saved instruction pointer).
'''
cc = trace.getEmulator().getCallingConvention("stdcall")
if "64" in trace.getMeta("Architecture"):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Love the overall idea, however for future proofing, we cannot assume that any arch with the chars "64" in the name ( such as commodore64 ) are amd64. This probably needs to be come something more like a dict lookup of
(arch,plat):cc

Follow the @invisig0th recommendation
@cmaruti
Copy link
Contributor Author

cmaruti commented Jun 15, 2015

Do you need something else here man before merge?

@atlas0fd00m
Copy link
Contributor

@cmaruti does this PR still function as expected on current Viv/Vdb?

@cmaruti
Copy link
Contributor Author

cmaruti commented Jan 8, 2019

I don’t know atm; gonna check it

@cmaruti
Copy link
Contributor Author

cmaruti commented Apr 1, 2019

@atlas0fd00m seems the whole breakpoint stuffs on win32 (32/64) does not work anymore :(

BEFORE merging master branch into

python sample06_sniper.py
RECON: 1260 0x76c3ec44 user32.CreateWindowExW(256, u'CalcFrame', u'Calcolatrice', 13238272)
RECON: 1260 0x76c3ec44 user32.CreateWindowExW(0, u'CalcFrame', NULL, 1073741824)
RECON: 1260 0x76c3ec44 user32.CreateWindowExW(0, u'EDIT', u'', 268435456)
RECON: 1260 0x76c3ec44 user32.CreateWindowExW(0, u'STATIC', u'', 1342177358)
RECON: 1260 0x76c3ec44 user32.CreateWindowExW(0, 0x0000c03b, u'OleMainThreadWndName', 2281701376L)
RECON: 1260 0x76c3ec44 user32.CreateWindowExW(0, u'CicMarshalWndClass', u'CicMarshalWnd', 2281701376L)
RECON: 1260 0x76c3ec44 user32.CreateWindowExW(0, u'MSCTFIME UI', u'MSCTFIME UI', 2281701376L)

AFTER merging master branch

NO breakpoints hit

import sys
VDB_ROOT = "C:\\vivisect"
sys.path.append(VDB_ROOT)

import vtrace
import vtrace.breakpoints as v_bp
import vdb.recon as v_rec
import vdb.recon.sniper as v_snip

def hookfunc(event, trace, retaddr, args, cc):
    print('ret: 0x%.8x: %r' % (retaddr, args))
    
trace = vtrace.getTrace()

#v_snip.snipeDynArg(trace, 'user32.CreateWindowExW', 3)
#v_snip.snipeArgValue(trace, 'user32.CreateWindowExW', 1, 0x100)
#v_bp.addHook( trace, 'user32.CreateWindowExW', hookfunc )
v_rec.addReconBreak(trace, 'user32.CreateWindowExW', 'IUUI')

trace.execute(r'c:\windows\system32\calc.exe')
trace.setMode('RunForever', True)
trace.run()

@atlas0fd00m
Copy link
Contributor

Windows has added significant changes to the debugging security model, requiring more permissions to write to a debugged process. since Breakpoints actually overwrite bytes in the target process (for Intel, Viv writes the Int3 instruction, or 0xCC at the breakpoint location).

but wait, you're suggesting that this change has to do with an update to Viv?

i apologize for the delay in responding, @cmaruti . i didn't realize you had (bad notification mechanisms for me apparently).

can you give me more information about what version you were using before breakpoints stopped working? a date?

@cmaruti
Copy link
Contributor Author

cmaruti commented Jul 23, 2022

Since a long time has passed can't be helpful. Probably the best approx was the date around the post before my last one

@atlas0fd00m
Copy link
Contributor

my apologies, @cmaruti , apparently github stopped sending me email notifications and i only now realized it.
thank you for your contributions.

i'm working out why this stopped working for you and will have a PR done soon.

@cmaruti
Copy link
Contributor Author

cmaruti commented Jul 29, 2022

Np sir! I'll be more than happy to check it out later when done

@atlas0fd00m
Copy link
Contributor

hey @cmaruti
thank you for your patience...
could you see if this branch of Viv changes anything for you?

i'm not sure if this is a necessary change, since i think i've been running into issues where the user account simply lacks the permissions overall. but that doesn't answer your problem.

https://github.com/atlas0fd00m/vivisect/tree/win_vdb_privs

#536

thanks!
@

@cmaruti
Copy link
Contributor Author

cmaruti commented Aug 29, 2022

Hi @atlas0fd00m nothing changed from my side. Now I got the following trace and seems problem is elsehwere...

C:\vivisect-win_vdb_privs>python sample.py
Failed to resolve breakpoint address for expression: user32.CreateWindowExW
Error:
Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 22, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 37, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\breakpoints.py", line 98, in resolveAddress
    self.address = trace.parseExpression(self.vte)
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\__init__.py", line 939, in parseExpression
    return int(e_expr.evaluate(expression, vlocs))
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 40, in evaluate
    raise ExpressionFail(pycode, e)
envi.expression.ExpressionFail: ExpressionFail: 'user32.CreateWindowExW' is not a valid expression in this context (NameError("name 'user32' is not defined"))
Failed to resolve breakpoint address for expression: user32.CreateWindowExW
Error:
Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 22, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 37, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\breakpoints.py", line 98, in resolveAddress
    self.address = trace.parseExpression(self.vte)
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\__init__.py", line 939, in parseExpression
    return int(e_expr.evaluate(expression, vlocs))
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 40, in evaluate
    raise ExpressionFail(pycode, e)
envi.expression.ExpressionFail: ExpressionFail: 'user32.CreateWindowExW' is not a valid expression in this context (NameError("name 'user32' is not defined"))
Failed to resolve breakpoint address for expression: user32.CreateWindowExW
Error:
Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 22, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 37, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\breakpoints.py", line 98, in resolveAddress
    self.address = trace.parseExpression(self.vte)
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\__init__.py", line 939, in parseExpression
    return int(e_expr.evaluate(expression, vlocs))
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 40, in evaluate
    raise ExpressionFail(pycode, e)
envi.expression.ExpressionFail: ExpressionFail: 'user32.CreateWindowExW' is not a valid expression in this context (NameError("name 'user32' is not defined"))
Failed to resolve breakpoint address for expression: user32.CreateWindowExW
Error:
Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 22, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 37, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\breakpoints.py", line 98, in resolveAddress
    self.address = trace.parseExpression(self.vte)
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\__init__.py", line 939, in parseExpression
    return int(e_expr.evaluate(expression, vlocs))
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 40, in evaluate
    raise ExpressionFail(pycode, e)
envi.expression.ExpressionFail: ExpressionFail: 'user32.CreateWindowExW' is not a valid expression in this context (NameError("name 'user32' is not defined"))
Failed to resolve breakpoint address for expression: user32.CreateWindowExW
Error:
Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 22, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 37, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\breakpoints.py", line 98, in resolveAddress
    self.address = trace.parseExpression(self.vte)
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\__init__.py", line 939, in parseExpression
    return int(e_expr.evaluate(expression, vlocs))
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 40, in evaluate
    raise ExpressionFail(pycode, e)
envi.expression.ExpressionFail: ExpressionFail: 'user32.CreateWindowExW' is not a valid expression in this context (NameError("name 'user32' is not defined"))
Failed to resolve breakpoint address for expression: user32.CreateWindowExW
Error:
Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 22, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 37, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\breakpoints.py", line 98, in resolveAddress
    self.address = trace.parseExpression(self.vte)
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\__init__.py", line 939, in parseExpression
    return int(e_expr.evaluate(expression, vlocs))
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 40, in evaluate
    raise ExpressionFail(pycode, e)
envi.expression.ExpressionFail: ExpressionFail: 'user32.CreateWindowExW' is not a valid expression in this context (NameError("name 'user32' is not defined"))
Failed to resolve breakpoint address for expression: user32.CreateWindowExW
Error:
Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 22, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 37, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\breakpoints.py", line 98, in resolveAddress
    self.address = trace.parseExpression(self.vte)
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\__init__.py", line 939, in parseExpression
    return int(e_expr.evaluate(expression, vlocs))
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 40, in evaluate
    raise ExpressionFail(pycode, e)
envi.expression.ExpressionFail: ExpressionFail: 'user32.CreateWindowExW' is not a valid expression in this context (NameError("name 'user32' is not defined"))
Failed to resolve breakpoint address for expression: user32.CreateWindowExW
Error:
Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 22, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 37, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\breakpoints.py", line 98, in resolveAddress
    self.address = trace.parseExpression(self.vte)
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\__init__.py", line 939, in parseExpression
    return int(e_expr.evaluate(expression, vlocs))
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 40, in evaluate
    raise ExpressionFail(pycode, e)
envi.expression.ExpressionFail: ExpressionFail: 'user32.CreateWindowExW' is not a valid expression in this context (NameError("name 'user32' is not defined"))
Failed to resolve breakpoint address for expression: user32.CreateWindowExW
Error:
Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 22, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 37, in evaluate
    val = eval(pycode, {}, locvars)
  File "<string>", line 1, in <module>
NameError: name 'user32' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\breakpoints.py", line 98, in resolveAddress
    self.address = trace.parseExpression(self.vte)
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\vtrace\__init__.py", line 939, in parseExpression
    return int(e_expr.evaluate(expression, vlocs))
  File "C:\vivisect-win_vdb_privs\vivisect-win_vdb_privs\envi\expression.py", line 40, in evaluate
    raise ExpressionFail(pycode, e)
envi.expression.ExpressionFail: ExpressionFail: 'user32.CreateWindowExW' is not a valid expression in this context (NameError("name 'user32' is not defined"))

@atlas0fd00m
Copy link
Contributor

thanks for checking.
that is certainly odd. a very unexpected error.
that looks like it's failing to lookup expressions, looking for user32 functions.

can you give me any more specifics about what you think is causing this? i don't recognize that issue so it's hard to track it down on my side.

also, did you install pywin32?

@atlas0fd00m
Copy link
Contributor

can you share what's in sample.py?

@cmaruti
Copy link
Contributor Author

cmaruti commented Aug 29, 2022

Yep was totally unexpected also for me...
pywin32 was installed and here you go with the contents of sample.py

import sys
VDB_ROOT = "C:\\vivisect-win_vdb_privs\\vivisect-win_vdb_privs\\"
sys.path.append(VDB_ROOT)

import vtrace
import vtrace.breakpoints as v_bp
import vdb.recon as v_rec
import vdb.recon.sniper as v_snip

def hookfunc(event, trace, retaddr, args, cc):
    print('ret: 0x%.8x: %r' % (retaddr, args))
    
trace = vtrace.getTrace()
trace.execute(r'c:\windows\system32\calc.exe')
trace.setMode('RunForever', True)

v_rec.addReconBreak(trace, 'user32.CreateWindowExW', 'IWWI')
v_rec.addReconBreak(trace, 'shell32.ShellExecuteW', 'IWWWWI')

trace.run()

@atlas0fd00m
Copy link
Contributor

thanks, @cmaruti . i'll look into it.

just to level-set on your environment, could you try using VDB on your machine, both mainline and this branch and let me know if you are able to set breakpoints on both (just standard VDB).

thanks@

@cmaruti
Copy link
Contributor Author

cmaruti commented Sep 5, 2022

Hi @atlas0fd00m and sorry for the late reply; I have been away from the pc for a while

I did a silly mistake in my script tracked down thanks to your input :D! I can confirm both of the branches (main and priv) work well with the recon commit on my Win10 box; I have also updated the posted script for your convenience

@@ -68,18 +68,28 @@ def reprargs(trace, fmt, args):
r.append(rstr)
return r

def detect_cc(trace):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i like this approach (calling detect_cc) much better than inline hand-jamming...

please define the dictionary outside the function, so it doesn't get recreated every call.

also, these are the defaults (although i386/linux should be cdecl), but not necessarily the reality. what happens when the code gets it wrong? what's worst-case scenario?

thanks!

@atlas0fd00m
Copy link
Contributor

hey @cmaruti, could you please merge in master and resolve conflicts? i'm happy to help (DM me on Vertex Slack) for things that have dramatically changed over the past few years.

@atlas0fd00m
Copy link
Contributor

hey @cmaruti , looking good, thanks for the improvements.

let me know if you want to chat about some good unittests (and how to wrap them into our testing framework). that's all that's keeping us from merging this in. well, that and merging in the base branch.

@rakuy0 and i just want to be sure we know if we break something moving forward. keeps us honest and improves the overall quality of vivisect. if you look back through our merged PR's, he and i are pretty frequently saying "hey, looks good! where's the tests?" lol.

thanks, man,
@

@cmaruti
Copy link
Contributor Author

cmaruti commented Sep 30, 2022

Sorry guys but unfortunately I had no time to put togheter an unit test atm but I will do in the upcoming weeks. I'm not good at that but I'll try to get by...saw a lot of example in the code repo

unit test file
@cmaruti
Copy link
Contributor Author

cmaruti commented Oct 13, 2022

@atlas0fd00m let me know if the testrecon.py unit test file is fine...

Copy link
Contributor

@atlas0fd00m atlas0fd00m left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sorry for the delay in response. i've been sitting on this review, trying to get the libc.exit hook fixed. i now have a fix in, and ready for moving forword.

currently your unittest fails. let's figure out why and then we can get this merged in.
unfortunately i believe part of this failure could be waiting on #550

vdb/tests/testrecon.py Outdated Show resolved Hide resolved
vdb/tests/testrecon.py Outdated Show resolved Hide resolved
vdb/tests/testrecon.py Outdated Show resolved Hide resolved
vdb/tests/testrecon.py Outdated Show resolved Hide resolved
vdb/tests/testrecon.py Outdated Show resolved Hide resolved
cmaruti and others added 5 commits October 31, 2022 07:39
Co-authored-by: atlas0fd00m <atlas@r4780y.com>
Co-authored-by: atlas0fd00m <atlas@r4780y.com>
Co-authored-by: atlas0fd00m <atlas@r4780y.com>
Co-authored-by: atlas0fd00m <atlas@r4780y.com>
Co-authored-by: atlas0fd00m <atlas@r4780y.com>
@atlas0fd00m
Copy link
Contributor

@cmaruti , could you pull in the latest master branch? @invisig0th just merged in a fix allowing Linux systems to pick-up library loads as they occur (which would affect your unittests).

thanks!
@

@cmaruti
Copy link
Contributor Author

cmaruti commented Jan 6, 2023

@atlas0fd00m CI tests failed once again :(

@atlas0fd00m
Copy link
Contributor

so the other error went away tho. recon is working on AMD64. i'm guessing it is failing on i386 because of a test issue rather than a recon/vdb issue. we're getting close!

@atlas0fd00m
Copy link
Contributor

@cmaruti , would you like any help on this?
DM me in Synapse Slack if you'd like more back-and-forth conversation.

thanks again!
@

@cmaruti
Copy link
Contributor Author

cmaruti commented Jan 20, 2023

Hi @atlas0fd00m and sorry for the late response...
I tracked down the problem and I'm pretty sure the unittest fails because circle-ci wasn't able to run 32-bit binary. I have the same behavior on my box; after I have add support for 32-bits elf (sudo dpkg --add-architecture i386; sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386) unit tests complete succesfully.

So I dunno what is the best way to handle this: do you usually put a swicth on your unit test file to run specific test based on the box architecture and os you are running on? Let me know what you want me to do :D

# python3 -m unittest vdb/tests/testrecon.py

<OUTPUT TRUNCATED>
._parseSectionRelocs: Reloc section differs from Dynamics: 0xb14
_parseSectionRelocs: Reloc section differs from Dynamics: 0xb4c
Failed to resolve breakpoint address for expression: libc.exit (delayed resolution?)
/home/cmaruti/vivisect/vivtestfiles-master/linux/i386/chgrp.llvm: missing operand
Try '/home/cmaruti/vivisect/vivtestfiles-master/linux/i386/chgrp.llvm --help' for more information.
RECON: 3452 0xf7dead80 libc.exit (libc._IO_2_1_stderr_, 0x00000001, 0xf7f94884, chgrp., chgrp.calloc())
.
----------------------------------------------------------------------
Ran 2 tests in 22.185s

OK

Copy link
Contributor

@atlas0fd00m atlas0fd00m left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

awesome. well done, @cmaruti and thank you!

@atlas0fd00m atlas0fd00m merged commit e84e2bf into vivisect:master Jan 21, 2023
@rakuy0 rakuy0 added this to the v1.1.0 milestone Feb 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants