It is fairly straightforward to root an Android phone using SDK platform tools (adb, fastboot), for example this is a very nice guide how to root HTC One M8. Basically you download SuperSU superuser manager to your device, download custom recovery image onto your computer and flash it to your device via command
fastboot flash recovery your_custom_recovery.img
then reboot into newly flashed recovery and flash the SuperSU. Boom, you’re done.
The problem with this approach, once you phone receives OTA (over the air) update (e.g. new version of Android) it needs original stock recovery to install it. If you have custom recovery (e.g. TWRP) – OTA update will fail. The solution is, when you root your phone, not to flash custom recovery, but just to reboot into it without flashing. Instead of above command, use
fastboot boot your_custom_recovery.img
This command will reboot your phone into custom recovery without flashing it. Then you can flash SuperSU and after reboot your phone will be rooted and original stock recovery remains.
You can even save the original stock recovery (after you rooted the phone) in case you do need to flash custom one. This way you can have a backup of stock recovery in case you need to flash it back to install OTA update. Below steps are for HTC One M8, but other devices will have similar approach:
Assuming that your phone is connected to PC, you have correct drivers installed and USB debugging mode enable.
run "adb shell" command on your PC "su" (watch your phone and grant permission if needed) "dd if=/dev/block/mmcblk0p43 of=/sdcard/stock_recovery.img"
This will copy stock recovery of your HTC One M8 into file “stock_recovery.img” on the SD Card.
Credits go to this XDA thread