Code Monkey home page Code Monkey logo

wxhexeditor's Introduction

wxHexEditor

wxHexEditor official GIT repo For info : http://www.wxhexeditor.org

Compilation instructions

Just launch make!

Compilation dependencies on Linux

  • wxgtk;

wxhexeditor's People

Contributors

alzigopri avatar bwidawsk avatar eua avatar gitfib avatar gtsiber avatar jiehong avatar lilydjwg avatar mcejp avatar tehkain avatar vadz avatar xhabit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wxhexeditor's Issues

To modify Tags removing/editing window logic

Hello!

[1] Nowadays, when user marks some fragment with tag and then wants to modify it, he chooses tag, pushes Edit Tag on right-click menu. Then, if user wants to cancel its editing for some reason, he\she will intuitively push 'Remove' button, because pushing [X] is not what user will do on his first step. User sees buttons at the first place. So, the idea is to add 'Cancel' button on Tag Dialog window and 'Remove' button to rename on 'Remove Tag'. Yes, it makes button-sign a little bit longer, but much more human-readable.

wxh_tag_edit

So, 'Save' - 'Remove' raw will be 'Save' - 'Remove Tag' - 'Cancel'

[2] Nowadays on right-click menu we have three tag items: Quick Tag, New Tag, Tag Edit.
I offer to add also Remove Tag, which will open the tags-list, and user can be able to remove selected tag(s) or all tag entirely. See schematic picture:

remove_tag_logic

To add 'Get Strings' window to 'View' menu

Hello!

Anyway, user can try 'strings' command to get string data from target file, but it'll be convenient, if wxHE has such functionality too. Of course, with 'Find/Find All' sub-command to search needed strings.

Thanks!

Disassembler Panel TextCtrl does not properly resize.

Disassembler wxTextCtrl m_dasmCtrl does not resize with the Disassembler panel. This makes it essentially impossible to use. While I'm new to wxWidgets, changing line 683 of HexEditorGui.cpp to be the following appears to fix the problem.

mainSizer->Add( m_dasmCtrl, 1, wxALIGN_CENTER_HORIZONTAL| wxBOTTOM | wxRIGHT | wxLEFT | wxEXPAND, 5 );

I am running Fedora fc22.x86_64 with version 2.8.12 of wxWidgets.
wxHexEditor version 0.24 Beta Development.

SEGV and Find Problems

Hello!

Not sure, if wxH is the the culprit in current test-case, but will put core-dump info here. Possibly, @plater can help here.

Version to reproduce: 0.23+git20170223-44.1

Test file is attached: test.txt

Steps-to-reproduce algo:

  1. Open test.txt in wxH.
  2. Call 'Find' window.
  3. In 'Find' window choose Text search-mode and all options are OFF, besides 'Wrap on', which should be ON.
  4. Put = character as the search query and push 'Find' button.
  5. Switch 'Search backwords' ON (you'll have 'Wrap on' and 'Search backwords' ON only) and push 'Find' button again. Result: SEGV (11).

BackTrace info:
coredump_segv_11_backtrace_0.23+git20170223-44.1.txt

Wrong block-size to delete after filling fragment

Hello!

Version to reproduce: 0.23+git20170224-50.1

Test files: test.txt and test_1.txt

Steps-to-reproduce algo:

  1. Open wxH.
  2. Tools -> Compare Files. Choose test_1.txt and test.txt. All options are off by default.
    Result: two files are opened and differences (absent fragment) are highlighted.
  3. Select highlighted fragment and choose Delete. Result: deletion is normal, block-size is correct.
  4. Revert changes from 3. back. Result: you'll get the highlighted fragment.
  5. Select highlighted fragment and push 'Fill Selection' option. Fill will some symbols, e.g. CC.
  6. Select filled fragment and push Delete. Result: wxH will delete block-size more, than it was defined by user.

Visualization: https://www.youtube.com/watch?v=Ce2Zw4Os8Jc

wxHexEditor v0.22-v0.24 Linux (Language English [en_GB] is not supported by the system)

wxHexEditor version: v0.24 (rev 3b3e32d)
Also happens when using wxHexEditor (0.22+repack-2.2) from the debian repository

 Distribution: Debian 
       Version: 8 (debian version: 8.2

Support Lifecycle: N\A
Codename: 8 (jessie)
Fullname: Debian GNU/Linux 8 (jessie)

   Kernel Name: Linux
Kernel Release: 3.16.0-4-amd64
Kernel Version: #1 SMP Debian 3.16.7-ckt11-1+deb8u3 (2015-08-04)

Machine Architecture: x86_64
Error Message:

00:23:30: Cannot set locale to language "English".
00:23:30: locale 'en_GB' cannot be set.
00:23:30: This language is not supported by the system.

-- why is it using en_GB instead of en_US for the English language?
Should there not be a language option for 'English (GB)' / 'English (US)'

Assert when using Find All

Steps to reproduce:

  • $ echo "hello world" > test.txt
  • $ wxHexEditor test.txt
  • Open "Find" dialog
  • Enter "6C" in search
  • Make sure that "Seach as Hex" is selected
  • Press "Find All"
  • Assert<<

  • If you continue, the search continues and it works well

If you need more info please let me know!


Environment:
wxhexeditor-git-r537.6613dc6-1
Arch Linux 64-bit

ASSERT INFO:
/usr/include/wx-3.0/wx/strvararg.h(456): assert "(argtype & (wxFormatStringSpecifier::value)) == argtype" failed in wxArgNormalizer(): format specifier doesn't match argument type

BACKTRACE:
[1] std::ctype::do_widen(char) const
[2] std::ctype::do_widen(char) const
[3] wxAppConsoleBase::CallEventHandler(wxEvtHandler_, wxEventFunctor&, wxEvent&) const
[4] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler_, wxEvent&)
[5] wxEvtHandler::SearchDynamicEventTable(wxEvent&)
[6] wxEvtHandler::TryHereOnly(wxEvent&)
[7] wxEvtHandler::ProcessEventLocally(wxEvent&)
[8] wxEvtHandler::ProcessEvent(wxEvent&)
[9] wxEvtHandler::SafelyProcessEvent(wxEvent&)
[10] g_signal_emit_valist
[11] g_signal_emit
[12] g_signal_emit_valist
[13] g_signal_emit
[14] g_closure_invoke
[15] g_signal_emit_valist
[16] g_signal_emit
[17] gtk_propagate_event
[18] gtk_main_do_event
[19] g_main_context_dispatch
[20] g_main_loop_run
[21] gtk_main
[22] wxGUIEventLoop::DoRun()
[23] wxEventLoopBase::Run()
[24] wxDialog::ShowModal()
[25] std::ctype::do_widen(char) const
[26] std::ctype::do_widen(char) const
[27] wxAppConsoleBase::CallEventHandler(wxEvtHandler_, wxEventFunctor&, wxEvent&) const
[28] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler_, wxEvent&)
[29] wxEvtHandler::SearchDynamicEventTable(wxEvent&)
[30] wxEvtHandler::TryHereOnly(wxEvent&)
[31] wxEvtHandler::DoTryChain(wxEvent&)
[32] wxEvtHandler::ProcessEvent(wxEvent&)
[33] wxWindowBase::TryAfter(wxEvent&)
[34] wxEvtHandler::SafelyProcessEvent(wxEvent&)
[35] wxMenuBase::SendEvent(int, int)
[36] g_closure_invoke
[37] g_signal_emit_valist
[38] g_signal_emit
[39] g_closure_invoke
[40] g_signal_emit_valist
[41] g_signal_emit
[42] gtk_accel_group_activate
[43] gtk_accel_groups_activate
[44] gtk_window_activate_key
[45] g_closure_invoke
[46] g_signal_emit_valist
[47] g_signal_emit
[48] gtk_propagate_event
[49] gtk_main_do_event
[50] g_main_context_dispatch
[51] g_main_loop_run
[52] gtk_main
[53] wxGUIEventLoop::DoRun()
[54] wxEventLoopBase::Run()
[55] wxAppConsoleBase::MainLoop()
[56] wxEntry(int&, wchar_t**)
[57] __libc_start_main

Change repository link from homepage to this git repository

It seems that this github repository is more up to date than the svn from sourceforge.

Perhaps it would be better to link the repository here, than on sourceforge?

According to #2, you said it seems better to point to the svn for now, but why is that?

Assertion Failure

Happened after I opened a file and double clicked an address. Can't seem to get it to do it again at the moment, but I thought I'd share a bug report anyways in case it pops back up.

./src/common/wincmn.cpp(3300): assert "Assert failure" failed in ReleaseMouse(): Releasing mouse in 0x3101d082820(wxScrolledWindow) but it is not captured

ASSERT INFO:
./src/common/wincmn.cpp(3300): assert "Assert failure" failed in ReleaseMouse(): Releasing mouse in 0x3101d082820(wxScrolledWindow) but it is not captured

BACKTRACE:
[1] wxWindowBase::ReleaseMouse()
[2] wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const
[3] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)
[4] wxEvtHandler::SearchDynamicEventTable(wxEvent&)
[5] wxEvtHandler::TryHereOnly(wxEvent&)
[6] wxEvtHandler::ProcessEventLocally(wxEvent&)
[7] wxEvtHandler::ProcessEvent(wxEvent&)
[8] wxScrollHelperEvtHandler::ProcessEvent(wxEvent&)
[9] wxEvtHandler::SafelyProcessEvent(wxEvent&)
[10] g_closure_invoke
[11] g_signal_emit_valist
[12] g_signal_emit
[13] gtk_propagate_event
[14] gtk_main_do_event
[15] g_main_context_dispatch
[16] g_main_loop_run
[17] gtk_main
[18] wxGUIEventLoop::DoRun()
[19] wxEventLoopBase::Run()
[20] wxAppConsoleBase::MainLoop()
[21] wxEntry(int&, wchar_t**)
[22] __libc_start_main

Assertion Failure Screenshot

~ > uname -srv
Linux 4.1.6.201508230818-1-grsec #1 SMP PREEMPT Sun Aug 23 12:49:40 EDT 2015
~ > pacman -Qm wxhexeditor-git
wxhexeditor-git v0.23.r30.g3b3e32d-1
~ > wxHexEditor 
13:12:47: Warning: Mismatch between the program and library build versions detected.
The library used 3.0 (wchar_t,compiler with C++ ABI 1008,wx containers,compatible with 2.8),
and your program used 3.0 (wchar_t,compiler with C++ ABI 1009,wx containers,compatible with 2.8).
01:12:48 PM: Debug: Failed to connect to session manager: SESSION_MANAGER environment variable not defined
OnMenuEvent: 5000

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: IA__gdk_drawable_get_size: assertion 'GDK_IS_DRAWABLE (drawable)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: IA__gdk_drawable_get_size: assertion 'GDK_IS_DRAWABLE (drawable)' failed
Rahman ve Rahim olan Allah'ın adıyla.
Send UpdateUI Event
Send UpdateUI Event
./src/common/wincmn.cpp(3300): assert "Assert failure" failed in ReleaseMouse(): Releasing mouse in 0x3101d082820(wxScrolledWindow) but it is not captured
./src/gtk/window.cpp(4704): assert "g_captureWindow" failed in DoReleaseMouse(): can't release mouse - not captured
./src/common/wincmn.cpp(3319): assert "!wxMouseCapture::stack.empty()" failed in ReleaseMouse(): Releasing mouse capture but capture stack empty?
Send UpdateUI Event
Send UpdateUI Event
Send UpdateUI Event
Send UpdateUI Event
Send UpdateUI Event
Send UpdateUI Event
OnMenuEvent: 1000
OnMenuEvent: 5000

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: IA__gdk_drawable_get_size: assertion 'GDK_IS_DRAWABLE (drawable)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: IA__gdk_drawable_get_size: assertion 'GDK_IS_DRAWABLE (drawable)' failed
Rahman ve Rahim olan Allah'ın adıyla.
Send UpdateUI Event
./src/common/wincmn.cpp(3300): assert "Assert failure" failed in ReleaseMouse(): Releasing mouse in 0x3101d0a3e40(wxScrolledWindow) but it is not captured
./src/gtk/window.cpp(4704): assert "g_captureWindow" failed in DoReleaseMouse(): can't release mouse - not captured
./src/common/wincmn.cpp(3319): assert "!wxMouseCapture::stack.empty()" failed in ReleaseMouse(): Releasing mouse capture but capture stack empty?
Send UpdateUI Event
Send UpdateUI Event
Send UpdateUI Event
Send UpdateUI Event
OnMenuEvent: 5000

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: IA__gdk_drawable_get_size: assertion 'GDK_IS_DRAWABLE (drawable)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: IA__gdk_drawable_get_size: assertion 'GDK_IS_DRAWABLE (drawable)' failed
Rahman ve Rahim olan Allah'ın adıyla.
Send UpdateUI Event
Send UpdateUI Event
Send UpdateUI Event
Send UpdateUI Event
OnMenuEvent: 1000
OnMenuEvent: 1000
01:20:29 PM: Debug: The thread 0x3101c838700 is being destroyed although it is still running! The application may crash.
OnMenuEvent: 5000

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: IA__gdk_drawable_get_size: assertion 'GDK_IS_DRAWABLE (drawable)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: _gdk_pixmap_new: assertion '(width != 0) && (height != 0)' failed

(wxHexEditor:15198): Gdk-CRITICAL **: IA__gdk_drawable_get_size: assertion 'GDK_IS_DRAWABLE (drawable)' failed
Rahman ve Rahim olan Allah'ın adıyla.
Send UpdateUI Event
Send UpdateUI Event

wxStaticBox has wrong parental relationship

wxStaticBoxSizer* sbSizerSearchOptions;
	sbSizerSearchOptions = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options") ), wxVERTICAL );
	
	chkMatchCase = new wxCheckBox( this, wxID_ANY, _("Match Case"), wxDefaultPosition, wxDefaultSize, 0 );

In wxWidgets 2.9.1 and above, elements that are visually going inside the staticbox also need the staticbox, not this, as parent:

auto sbSizerSearchOptions = new wxStaticBoxSizer(wxVERTICAL, this, _("Options"));
auto sb = sbSizerSearchOptions->GetStaticBox();
chkMatchCase = new wxCheckBox(sb, wxID_ANY, _("Match Case"), ...);

udis86/scripts/ud_opcode.py

in file udis86/scripts/ud_opcode.py for FC23 nedd add line at begin:
from future import print_function
for construction: print(("%s |-<%s>" % ( pfxs, idx )), end="", flush=True)
(Python 2.7.1)

Assert Failed in auibook.cpp

Occurs with V0.24 (rev 3b3e32d)
Happens when opening: Options -> Preferences (then either click the save or cancel button)

EDIT: only seems to happen if a file has not been opened.

ASSERT INFO:
../src/aui/auibook.cpp(2270): assert "page_idx < m_tabs.GetPageCount()" failed in GetPage().

BACKTRACE:
[1] wxAuiNotebook::GetPage(unsigned long) const
[2] HexEditorFrame::GetActiveHexEditor()
[3] HexEditorFrame::OnOptionsMenu(wxCommandEvent&)
[4] wxAppConsoleBase::CallEventHandler(wxEvtHandler_, wxEventFunctor&, wxEvent&) const
[5] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler_, wxEvent&)
[6] wxEvtHandler::SearchDynamicEventTable(wxEvent&)
[7] wxEvtHandler::TryHereOnly(wxEvent&)
[8] wxEvtHandler::DoTryChain(wxEvent&)
[9] wxEvtHandler::ProcessEvent(wxEvent&)
[10] wxWindowBase::TryAfter(wxEvent&)
[11] wxEvtHandler::SafelyProcessEvent(wxEvent&)
[12] wxMenuBase::SendEvent(int, int)
[13] g_closure_invoke
[14] g_signal_emit_valist
[15] g_signal_emit
[16] gtk_widget_activate
[17] gtk_menu_shell_activate_item
[18] g_closure_invoke
[19] g_signal_emit_valist
[20] g_signal_emit
[21] gtk_propagate_event
[22] gtk_main_do_event
[23] g_main_context_dispatch
[24] g_main_loop_run
[25] gtk_main
[26] wxGUIEventLoop::DoRun()
[27] wxEventLoopBase::Run()
[28] wxAppConsoleBase::MainLoop()
[29] wxEntry(int&, wchar_t**)
[30] main
[31] __libc_start_main
[32] _start

Does not notice when running out of space

Following situation:

  • I have a 6GB /tmp with a 4.4GB .iso file in it
  • I edit said file with wxHexEditor
  • I save the file as a copy to /tmp
  • wxHexEditor shows the progress and reaches 100% without any messages
    -> the resulting file is only ~1.5GB in size

using current git snapshot via the archilinux x64 aur package.

enhancement for tags?

Tags are handy, working with binary files, there's some feature I think would be very nice to have in the editor (ordered by my idea of importance):

  1. A gui element (combobox+button?) to run an external command (keeping track of recent) with the current file as argument (optionally current selection start-end offsets could be also useful), the external command should simply generate on stdout (or replace the .tags file in-place) new xml and refresh current tags.
  2. A textinput filter on tags panel to hide/show only matching tags
  3. Currently to remove tags need to select one by one and use the context menu on the hex panel, would be nice to have a context menu on the tags panel to remove all selected tags.
  4. Tags in the tags panel optionally colored with same font/note colors.
  5. Overlapping tags are already supported, but the result in the hex panel could get a bit messy (I guess some sort of z-order is required to fix this, at least bringing up the one selected in the tags panel? I've no idea how the tags highlight works in the hex panel yet)
  6. Would be nice to support also nested tags, with a treeview instead of a list in the tags panel.
  7. Having point 1 implemented would be nice to have an "output" panel to display the stderr of the executed external command.

How do you think? I may take a look at the sources and work at it in a (hopefully not too far) future but sadly not yet.

Cheers

(I'm using version 0.23+repack-2+b1 from debian/sid)

Hope with close button on tabs

If there wree close button on tabs, someone would no need to click middle button or move to toolbar and click close button any more. I think its a wonderful feature.
Thanks

Characters are corrupted when shown in UTF-16 encoding

There appears to be a mixture of both single and double byte characters shown.
This problem exists on both Windows/Ubuntu in the latest official binaries.

Edit:
Happy to see that this has been partially fixed in 0.24 beta wtih 3be1e8e, just need to show all the characters in double-byte representation (or monospace) for ascii mode

Feature: File templates

Would be great to have the support of file templates/structure like :

  • 010Editor: [http://www.sweetscape.com/010editor/repository/templates/]
    • Helpful tools:
      • [https://github.com/d0c-s4vage/pfp]
      • [https://github.com/d0c-s4vage/py010parser]
  • Okteta: [https://docs.kde.org/trunk5/en/kdesdk/okteta/tools-structures.html]

This by making wxHexEditor able to read .bt or/and .osd files.

'Check file on VirusTotal' option enhancement-request

Hello!

It seems to be an interesting idea to check file-status on VirusTotal ( [1] https://www.virustotal.com/) directly from wxH. E.g. 'Tools' -> 'Check on VirusTotal'. Of course, this is suitable only if network connection is on.

VT provides public API for such functionality:

[2] https://www.virustotal.com/en/documentation/public-api/

In particular - 'Retrieving file scan reports' paragraph: [3] https://www.virustotal.com/en/documentation/public-api/#getting-file-scans

SEGV (11) on wxhexeditor-0.23+git20161226-8.1

Edited with CODE tag @EUA

#Hello!

[1] k_mikhail@linux-mk500:~> wxHexEditor --version
Ошибка сегментирования (core dumped)

[2] k_mikhail@linux-mk500:~> coredumpctl gdb 21188
           PID: 21188 (wxHexEditor)
           UID: 1000 (k_mikhail)
           GID: 100 (users)
        Signal: 11 (SEGV)
     Timestamp: Птн 2017-02-17 12:44:52 EET (3min 6s ago)
  Command Line: wxHexEditor --version
    Executable: /usr/bin/wxHexEditor
 Control Group: /user.slice/user-1000.slice/session-2.scope
          Unit: session-2.scope
         Slice: user-1000.slice
       Session: 2
     Owner UID: 1000 (k_mikhail)
       Boot ID: 1ce14bb138ad4e279a2e2d33226baf0c
    Machine ID: 4664bc7cba6aee90fe1efc7f571cbf28
      Hostname: linux-mk500
      Coredump: /var/lib/systemd/coredump/core.wxHexEditor.1000.1ce14bb138ad4e279a2e2d33226baf0c.21188.1487328292000000.xz
       Message: Process 21188 (wxHexEditor) of user 1000 dumped core.

GNU gdb (GDB; openSUSE Leap 42.2) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-suse-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://bugs.opensuse.org/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/wxHexEditor...Reading symbols from /usr/lib/debug/usr/bin/wxHexEditor.debug...done.
done.
[New LWP 21188]
[New LWP 21260]
[New LWP 21262]
[New LWP 21261]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Core was generated by `wxHexEditor --version'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000000000049a92a in HexEditorFrame::CreateFileWatcher (this=0x12b9700)
    at src/HexEditorFrame.cpp:1131
1131		for( unsigned i = 0 ; i<MyNotebook->GetPageCount() ; i++ ){
[Current thread is 1 (Thread 0x7fd32614aa80 (LWP 21188))]

[3] (gdb) bt
#0  0x000000000049a92a in HexEditorFrame::CreateFileWatcher() (this=0x12b9700)
    at src/HexEditorFrame.cpp:1131
#1  0x00007fd3247d3a71 in wxEventLoopBase::Run() (this=<synthetic pointer>, __in_chrg=<optimized out>) at include/wx/evtloop.h:398
#2  0x00007fd3247d3a71 in wxEventLoopBase::Run() (this=0x16df7c0)
    at src/common/evtloopcmn.cpp:78
#3  0x00007fd3247a3bad in wxAppConsoleBase::MainLoop() (this=0x11f7090)
    at src/common/appbase.cpp:334
#4  0x00007fd32481cb1d in wxEntry(int&, wchar_t**) (argc=@0x7fd324b6e5f0: 2, argv=<optimized out>) at src/common/init.cpp:495
#5  0x00007fd32481cbb2 in wxEntry(int&, char**) (argc=@0x7ffdce0ffc6c: 2, 
    argc@entry=@0x7ffdce0ffc6c: <optimized out>, argv=<optimized out>)
    at src/common/init.cpp:507
#6  0x000000000041bf82 in main(int, char**) (argc=2, argv=<optimized out>)
    at src/HexEditorApp.cpp:42
(gdb)

Seg fault wxHexEditor on command line with -- or any non file related character

Entering wxHexEditor --help or any non file related character on the command line results in a segmentation fault and core dump.
This issue is found in revision#ec653348e2f59f374a0a0e71e4ea6d97faa6a990
It brings up a message box and if you close the message box and exit immediately the seg fault happens. However if you load a file wxHexEditor functions as expected.

SEGV (11) in wxEventLoopBase::Run() [wxhexeditor-0.23+git20170218-31.2]

Hello!

Can't reproduce this again, because I even don't understand how I got this segv. But, possibly, backtrace can help to get the nature.

k_mikhail@linux-mk500:~> coredumpctl gdb 604
           PID: 604 (wxHexEditor)
           UID: 1000 (k_mikhail)
           GID: 100 (users)
        Signal: 11 (SEGV)
     Timestamp: Вто 2017-02-21 16:16:37 EET (1h 50min ago)
  Command Line: wxHexEditor
    Executable: /usr/bin/wxHexEditor
 Control Group: /user.slice/user-1000.slice/session-2.scope
          Unit: session-2.scope
         Slice: user-1000.slice
       Session: 2
     Owner UID: 1000 (k_mikhail)
       Boot ID: 1ce14bb138ad4e279a2e2d33226baf0c
    Machine ID: 4664bc7cba6aee90fe1efc7f571cbf28
      Hostname: linux-mk500
      Coredump: /var/lib/systemd/coredump/core.wxHexEditor.1000.1ce14bb138ad4e279a2e2d33226baf0c.604.1487686597000000.xz
       Message: Process 604 (wxHexEditor) of user 1000 dumped core.

GNU gdb (GDB; openSUSE Leap 42.2) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-suse-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://bugs.opensuse.org/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/wxHexEditor...
warning: the debug information found in "/usr/lib/debug//usr/bin/wxHexEditor.debug" does not match "/usr/bin/wxHexEditor" (CRC mismatch).

(no debugging symbols found)...done.
[New LWP 604]
[New LWP 677]
[New LWP 678]
[New LWP 679]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Core was generated by `wxHexEditor'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000000000049ca09 in ?? ()
[Current thread is 1 (Thread 0x7f6533e6ea80 (LWP 604))]
Missing separate debuginfos, use: zypper install wxhexeditor-debuginfo-0.23+git20170218-31.2.x86_64

(gdb) bt
#0  0x000000000049ca09 in  ()
#1  0x00007f65324f7a71 in wxEventLoopBase::Run() ()
    at /usr/lib64/libwx_baseu-suse.so.3
#2  0x00007f65324c7bad in wxAppConsoleBase::MainLoop() ()
    at /usr/lib64/libwx_baseu-suse.so.3
#3  0x00007f6532540b1d in wxEntry(int&, wchar_t**) ()
    at /usr/lib64/libwx_baseu-suse.so.3
#4  0x000000000041a702 in  ()
#5  0x00007f653138d6e5 in __libc_start_main (main=
    0x41a6f0, argc=1, argv=0x7ffc6e867308, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffc6e8672f8) at libc-start.c:289
#6  0x000000000041acd9 in  ()
(gdb)

Panel Title not changed after changing the language

Platform: Windows 7 x64
Version: 0.23 beta

Steps I used:
1.unzip wxHexEditor-v0.23-Win32.zip
2.run wxHexEditor, it will use system language (my case: simplified chinese), with some panel enabled
3.choose a different language (for exsample: english), then restart wxHexEditor
4.Most UI component changed into new language (english), except the title of panel (still simplified chinese)

Please confirm, thank you.

Insert newlines in Hex representation

What do you think about letting the user insert newlines in the Hex/Ascii display ?
It would allow "logical" separation between binary headers, binary data and CRC for example.

It would have been super useful in a recent reverse-engineering of a binary thrift message. If I could have aligned my data visually, it would have been easier to understand.

SEGV 11 on Deleting some file-fragment

Hello!

Version to reproduce: 0.23+git201702024-50.1

Test file: 123.txt

BackTrace: coredump_segv_11_023+git20170224-50.1_del.txt

Steps-to-reproduce algo:

  1. Open 123.txt in wxH.
  2. Mark some fragment - to leave last eight bytes.
  3. Right-click and Delete.
  4. Mark these eight bytes again, right-click and choose 'Fill Selection'. I filled by FF instead of 00.
  5. Mark FF-section you've got in 4., right-click and choose Delete.
  6. After 5. is done, make single left-click on file area. Result: SEGV 11.

P.S. Visualization: https://www.youtube.com/watch?v=tvHBXOhDfnI

Broken search-results on zero-byte offset for text-mode searching. [wxH: 0.23+git20170221-36.1]

Hello!

While waiting for wxH build with fix from #46, have tried the similar algo for text-mode.
Disassembler Panel in on.

Test file is the same from #46.

Steps-to-reproduce algo for 'Find' button:

  1. Open test-file wxH.
  2. Push Find.
  3. Switch on Text mode. Other options are OFF.
  4. Put single = sign as a search query and push 'Find' button. Result: wxH will mark the first byte offset, not null offset. And this is the first bug.
  5. Do not close search-window and continue to push 'Find' button. After wxH gets the last = sign, it will switch on null-offset byte successfully. And this is correct.

Steps-to-reproduce algo for 'Find All' button:

  1. Open test-file wxH.
  2. Push Find.
  3. Switch on Text mode. Other options are OFF.
  4. Put single = sign as a search query and push 'Find All' button. Result: 48 matches will be found from the null-offset. So null-offset is not missed here instead of steps-to-reproduce algo for 'Find' button. But 48 matches result is wrong, because there are 24 (48/2) matches in real. This reminds #41 . This is the second bug.

And in Disassembler panel you will get invalid status in.

Test-file is attached: test.txt

P.S. Long story short: https://www.youtube.com/watch?v=sOvd6pPc0WM

Problem on switching items in search-list

Hello!

  1. Search-list contains two items (in hex): 7F454C46 (ELF e_ident) and 4D5A (MZ-PE e_magic).
  2. Open some test ELF-file.
  3. Push Find button, choose the second item and then push 'Find'.
  4. wxHE finds 0 and item-list displays the first item from list.
  5. Push Find again, item-list will be switched on second item and so on.

Something like: https://www.youtube.com/watch?v=b9TUfqBCHws

wxHexEditor has a SIGABRT while searching

I cannot reproduce this bug, it has been reported in openSUSE see (correct link):
https://bugzilla.suse.com/show_bug.cgi?id=1022460
I fixed the other reproducible SIGSEGV's by upgrading to a git snapshot from 26 December 2016.
The reporter has posted gdb backtraces which I will attach.
https://bugzilla.opensuse.org/attachment.cgi?id=712000
https://bugzilla.opensuse.org/attachment.cgi?id=712568
https://bugzilla.opensuse.org/attachment.cgi?id=71259
https://bugzilla.opensuse.org/attachment.cgi?id=71275
https://bugzilla.opensuse.org/attachment.cgi?id=71276098
https://bugzilla.opensuse.org/attachment.cgi?id=712772
The reporter uses Russian so this could be related to that, he also has Issue #25 and Issue #24 but he never complained of that with version 0.23
wxhexeditor is built with wxWidgets-3.0.1 using gtk2 see:
https://build.opensuse.org/build/home:plater/Leap_42.2/x86_64/wxhexeditor/_log
for a full build log.

Paste HEX with \x00 notation

Hello!

Sometimes have to analyze files, which are given in \x format. For example ELF binaries inside of Perl-, PHP- scripts.

php_snipped

It'll be very useful and convenient, if wxH could work with such data: to convert, when such file is opened, and to save in plan-text strings and as binary.

Sample (ELF-header) as an example of such file:
hex_x.txt

hex_x

Thanks!

wxHexeditor no longer builds for 32 bit intel

Not sure what to do to correct this, occurs in the '#else' from '#ifdef SSE2' at src/HexDialogs.cpp:1346 I've only an x86_64 machine and attempts at compiling with -m32 bring up other errors. Seems like "i" needs a different type or something my c++ is poor.
Section from build log:
[ 77s] src/HexDialogs.cpp:1459:6: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'
[ 77s] if(! memcmp( bfr+i, search, search_size )) //if match found
[ 77s] ^~
[ 77s] src/HexDialogs.cpp:1459:23: error: 'i' was not declared in this scope
[ 77s] if(! memcmp( bfr+i, search, search_size )) //if match found
[ 77s] ^
[ 77s] src/HexDialogs.cpp:1459:8: warning: suggest explicit braces to avoid ambiguous 'else' [-Wparentheses]
[ 77s] if(! memcmp( bfr+i, search, search_size )) //if match found
[ 77s] ^
[ 77s] src/HexDialogs.cpp:1468:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
[ 77s] if( bfr[i] == search[0] || bfr[i] == UTF8SpeedHackChrs[0] )
[ 77s] ^~
[ 77s] src/HexDialogs.cpp:1472:6: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'
[ 77s] if(! memcmp( bfr+i, search, search_size )) //if match found
[ 77s] ^~
[ 77s] src/HexDialogs.cpp:1472:23: error: 'i' was not declared in this scope
[ 77s] if(! memcmp( bfr+i, search, search_size )) //if match found

Full log at:
https://build.opensuse.org/build/home:plater/openSUSE_Factory/i586/wxhexeditor/_log

I need to fix this before I can send the fixed wxhexeditor to openSUSE:Tumbleweed. Any suggestions welcome.

SEGV (11) on SearchPanel for wxhexeditor-0.23+git20170214-24.1

Hello!

've caught another SEGV (11), when tried to switch between items in search-result panel.

k_mikhail@linux-mk500:~> coredumpctl | grep wxH
Суб 2017-02-18 07:57:44 EET   3855  1000   100  11 * /usr/bin/wxHexEditor
k_mikhail@linux-mk500:~> coredumpctl gdb 3855
           PID: 3855 (wxHexEditor)
           UID: 1000 (k_mikhail)
           GID: 100 (users)
        Signal: 11 (SEGV)
     Timestamp: Суб 2017-02-18 07:57:21 EET (10min ago)
  Command Line: wxHexEditor
    Executable: /usr/bin/wxHexEditor
 Control Group: /user.slice/user-1000.slice/session-2.scope
          Unit: session-2.scope
         Slice: user-1000.slice
       Session: 2
     Owner UID: 1000 (k_mikhail)
       Boot ID: 1ce14bb138ad4e279a2e2d33226baf0c
    Machine ID: 4664bc7cba6aee90fe1efc7f571cbf28
      Hostname: linux-mk500
      Coredump: /var/lib/systemd/coredump/core.wxHexEditor.1000.1ce14bb138ad4e279a2e2d33226baf0c.3855.1487397441000000.xz
       Message: Process 3855 (wxHexEditor) of user 1000 dumped core.

GNU gdb (GDB; openSUSE Leap 42.2) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-suse-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://bugs.opensuse.org/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/wxHexEditor...(no debugging symbols found)...done.
[New LWP 3855]
[New LWP 3931]
[New LWP 3972]
[New LWP 3932]
[New LWP 3933]
[New LWP 3974]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Core was generated by `wxHexEditor'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00000000004688a0 in SearchPanel::OnTagSelect(wxCommandEvent&) ()
[Current thread is 1 (Thread 0x7f09b0724a80 (LWP 3855))]
(gdb)

BackTrace:

(gdb) bt
#0  0x00000000004688a0 in SearchPanel::OnTagSelect(wxCommandEvent&) ()
#1  0x00007f09aed4b95e in wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const ()
    at /usr/lib64/libwx_baseu-suse.so.2
#2  0x00007f09aee8f872 in wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) ()
    at /usr/lib64/libwx_baseu-suse.so.2
#3  0x00007f09aee904b9 in wxEvtHandler::SearchDynamicEventTable(wxEvent&) () at /usr/lib64/libwx_baseu-suse.so.2
#4  0x00007f09aee9050e in wxEvtHandler::TryHereOnly(wxEvent&) () at /usr/lib64/libwx_baseu-suse.so.2
#5  0x00007f09aee905a3 in wxEvtHandler::ProcessEventLocally(wxEvent&) () at /usr/lib64/libwx_baseu-suse.so.2
#6  0x00007f09aee905f9 in wxEvtHandler::ProcessEvent(wxEvent&) () at /usr/lib64/libwx_baseu-suse.so.2
#7  0x00007f09aee9068c in wxEvtHandler::SafelyProcessEvent(wxEvent&) () at /usr/lib64/libwx_baseu-suse.so.2
#8  0x00007f09af9229b7 in wxListBoxBase::SendEvent(int, int, bool) () at /usr/lib64/libwx_gtk2u_core-suse.so.2
#9  0x00007f09aca49b37 in _g_closure_invoke_va (closure=closure@entry=0x22234b0, return_value=return_value@entry=0x0, instance=instance@entry=0x2222440, args=args@entry=0x7ffe1f00f148, n_params=0, param_types=0x0) at gclosure.c:867
#10 0x00007f09aca62918 in g_signal_emit_valist (instance=0x2222440, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7ffe1f00f148) at gsignal.c:3294
#11 0x00007f09aca63592 in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>, detail=detail@entry=0)
    at gsignal.c:3441
#12 0x00007f09ad5c27bc in _gtk_tree_selection_internal_select_node (selection=<optimized out>, node=<optimized out>, tree=<optimized out>, path=path@entry=0x237a250, mode=<optimized out>, override_browse_mode=override_browse_mode@entry=0)
    at gtktreeselection.c:1427
#13 0x00007f09ad5d64ae in gtk_tree_view_real_set_cursor (tree_view=tree_view@entry=0x21d4740 [GtkTreeView], path=path@entry=0x237a250, clear_and_select=clear_and_select@entry=1, clamp_node=1) at gtktreeview.c:12610
#14 0x00007f09ad5daa38 in gtk_tree_view_button_press (widget=0x21d4740 [GtkTreeView], event=0x24815c0) at gtktreeview.c:2797
#19 0x00007f09aca63592 in <emit signal ??? on instance 0x21d4740 [GtkTreeView]> (instance=instance@entry=0x21d4740, signal_id=<optimized out>, detail=detail@entry=0) at gsignal.c:3441
    #15 0x00007f09ad4e2b65 in _gtk_marshal_BOOLEAN__BOXED (closure=0x1e23ff0, return_value=0x7ffe1f00f480, n_param_values=<optimized out>, param_values=0x7ffe1f00f530, invocation_hint=<optimized out>, marshal_data=0x7f09ad5da240 <gtk_tree_view_button_press>) at gtkmarshalers.c:86
    #16 0x00007f09aca49908 in g_closure_invoke (closure=closure@entry=0x1e23ff0, return_value=return_value@entry=0x7ffe1f00f480, n_param_values=2, param_values=param_values@entry=0x7ffe1f00f530, invocation_hint=invocation_hint@entry=0x7ffe1f00f4d0)
    at gclosure.c:804
    #17 0x00007f09aca5b0cb in signal_emit_unlocked_R (node=node@entry=0x1e4dbb0, detail=detail@entry=0, instance=instance@entry=0x21d4740, emission_return=emission_return@entry=0x7ffe1f00f600, instance_and_params=instance_and_params@entry=0x7ffe1f00f530) at gsignal.c:3667
    #18 0x00007f09aca62f78 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffe1f00f6c8) at gsignal.c:3395
#20 0x00007f09ad5f2884 in gtk_widget_event_internal (widget=widget@entry=0x21d4740 [GtkTreeView], event=event@entry=0x24815c0) at gtkwidget.c:5017
#21 0x00007f09ad5f2b59 in IA__gtk_widget_event (widget=widget@entry=0x21d4740 [GtkTreeView], event=event@entry=0x24815c0)
    at gtkwidget.c:4814
#22 0x00007f09ad4e1314 in IA__gtk_propagate_event (widget=0x21d4740 [GtkTreeView], event=0x24815c0) at gtkmain.c:2501
#23 0x00007f09ad4e16cb in IA__gtk_main_do_event (event=0x24815c0) at gtkmain.c:1696
#24 0x00007f09ad153c1c in gdk_event_dispatch (source=<optimized out>, callback=<optimized out>, user_data=<optimized out>)
    at gdkevents-x11.c:2425
#25 0x00007f09ac775134 in g_main_context_dispatch (context=0x1e09470) at gmain.c:3154
#26 0x00007f09ac775134 in g_main_context_dispatch (context=context@entry=0x1e09470) at gmain.c:3769
#27 0x00007f09ac775388 in g_main_context_iterate (context=0x1e09470, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3840
#28 0x00007f09ac77564a in g_main_loop_run (loop=0x23b98c0) at gmain.c:4034
#29 0x00007f09ad4e07b7 in IA__gtk_main () at gtkmain.c:1268
#30 0x00007f09af809c95 in wxGUIEventLoop::DoRun() () at /usr/lib64/libwx_gtk2u_core-suse.so.2
#31 0x00007f09aed7cad1 in wxEventLoopBase::Run() () at /usr/lib64/libwx_baseu-suse.so.2
#32 0x00007f09aed4bf0d in wxAppConsoleBase::MainLoop() () at /usr/lib64/libwx_baseu-suse.so.2
#33 0x00007f09aedc642d in wxEntry(int&, wchar_t**) () at /usr/lib64/libwx_baseu-suse.so.2
#34 0x000000000041bff2 in main ()
(gdb)

libwx_ 3.1.0-4.1 version is installed for wxhexeditor-0.23+git20170214-24.1.

Broken search-results on 'Find' and 'Search backward' option OFF [wxH: 0.23+git20170221-36.1]

Hello!

wxH: 0.23+git20170221-36.1 in use.

Step-to-reproduce algo:

  1. Open plain-text file.
  2. Call search query window. Option: hex, other options are off.
  3. Put hex-query, which will guaranteed give 'Not found' result, for example: 4D5A (two bytes).
  4. Push 'Find'. Result: wxH will mark the first two bytes.
  5. Push 'Find All'. wxH will return 'Search value not found' message window, and this is correct.
  6. Switch on 'Search backward' option ON and push 'Find'. Result: 'Search value not found' message window, and this is correct.
  7. Switch on 'Search backward' option OFF back, put 7F454C46 query (four bytes) and push 'Find'. Result: wxH will mark the first four bytes.
  8. Push 'Find All'. wxH will return 'Search value not found' message window, and this is correct.
  9. Switch on 'Search backward' option ON and push 'Find'. Result: 'Search value not found' message window, and this is correct.

Note: in case of Disassembler Panel is ON, execution of 'Find' with 'Search backward' is OFF will return 'invalid' status.

Test file is attached: test.txt

P.S. And, traditionally, long story short: https://www.youtube.com/watch?v=lSTq6gDUSEw

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.